- Birden fazla farklı (büyük küçük harf duyarsız) aramak istediğiniz için
shopt -s nullglob
cevap, kullanımı çok iyi bir cevaptır.
Sadece aradığını olursa *.jpg
, *.JPG
ve büyük harf ve küçük harf diğer altı değişik kombinasyonlar yapmak için en kolay şey olurdu
for file in *.[Jj][Pp][Gg]
hangi isimleri olan dosyaları arar
- (bir şey), ardından
.
(bir süre), ardından
J
veya j
, ardından
P
veya p
, ardından
G
veya g
Diğer bir deyişle,
- (bir şey), ardından
.
(bir süre), ardından
- "jpg", büyük ve küçük harflerin bir kombinasyonunda
Yani probleminizi çözmenin bir yolu
shopt -s nullglob
for file in *.[Jj][Pp][Gg] *.[Jj][Pp][Ee][Gg]
do …
İşin […]
püf noktası bilmek iyi bir şey ama daha iyi bir yol var. Size bir kabuk seçeneği olduğunu söyleseydim nocaseglob
, ne olduğunu tahmin edebilir misiniz?
shopt -s nullglob nocaseglob
for file in *.jpg *.jpeg
do …
yani şimdi *.jpg
demek
- (bir şey), ardından
.
(bir süre), ardından
- "jpg", büyük ve küçük harflerin bir kombinasyonunda
ve bu nedenle yukarıdaki komut maç olacak *.jpg
, *.JPG
, *.Jpg
, *.jpeg
, *.jPeG
, vb
Başka bir yol da extglob
genişletilmiş desen eşleştirme işleçlerini etkinleştirmek için kabuk seçeneğini kullanmaktır . Hala isteyeceksin nullglob
ve nocaseglob
. Genişletilmiş desen eşleştirme operatörleri, hepsi benziyor
(some_special_character) ( kalıp listesi )
alanlarda açıklık için ilave edilir ve burada pattern-list
bir listesi pattern
s ayrılmış |
karakter (ler). Amaçlarınız için en ilginç görünen
@ ( kalıp listesi )
bu, listelenen modellerden biriyle eşleşmesi anlamına gelir. Yani şimdi senaryo
shopt -s nullglob nocaseglob extglob
for file in *.@(jpg|jpeg)
do …
Bu biraz daha tipik bir yazı gibi görünebilir, ancak uzantı sayısı arttıkça tradeoff kaymaktadır. Düşünmek,
for file in *.@(jpg|jpeg|jfif|exif|tif|tiff|gif|bmp|png|svg)
biraz daha kısa
for file in *.jpg *.jpeg *.jfif *.exif *.tif *.tiff *.gif *.bmp *.png *.svg
Nerede yapmayı öğrendin $(echo …)
? Tabii ki, kesinlikle faydalı olabilir ve hatta bazen de olabilir, ama aşırı kullanıyorsunuz. Söylemesi çok iyi$(some_command(s) …)
$(echo …)
outputFile="image$i"
ve muhtemelen alıntılara bile ihtiyacınız kalmaz ( atama ifadesinde ).
Tamam, sadece bir kez mazeret alınabilir , çünkü değerinin outputFile
iyi huylu olduğunu bildiğiniz için, boş olmayan, özel olmayan karakterlerin ( image
) sabit bir dizesinden artı sabit bir dize olarak ayarladığınız bir diziden ayarladığınızdan boş olmayan, özel olmayan karakterler ( 1
) ve üzerinde yalnızca önemsiz aritmetik işlemler yaptı. Ancak, genel bir kural olarak, yapmamak için çok iyi bir nedeniniz olmadığı ve ne yaptığınızı bildiğinizden emin olmadığınız sürece, her zaman kabuk değişkenlerine referans vermelisiniz. Bu yüzden convert
emriniz, ideal olarak
convert "$file" -resize 50x50 "$outputFile"
(etrafında tırnak ile $outputFile
.)
if [ -e "$file" ]
... kullanmak ve ...fi
sadece dosya varken dönüşüm ve artış yapmak? (Vb bağlantı vb kontrol etmek için diğer testleri kullanabilirsiniz). Jpg adlı bir diziniz olsa bile korumalıdır.