Hoş geldiniz bash. Bu büyük büyü yeteneğine sahip eski, karanlık ve gizemli bir şey. :-)
Sormak istediğiniz seçenek, bash için değil, find
komutu içindir. Komut satırından, seçenekleri görmek için man find
yapabilirsiniz.
aradığınız bir "veya" için -o
geçerli:
söyledi
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
... Bunu yapmayın. Bu gibi depolama basit dosya isimleri için işe yarayabilir, ancak boşluk ve satır sonu gibi özel karakterlerle uğraşmak zorunda kalmaz, tüm bahisler kapalıdır. Detaylar için bakınız ParsingLs.
$ touch 'one.txt' 'two three.txt' 'foo.bmp'
$ list="$(find . -name \*.txt -o -name \*.bmp -type f)"
$ for file in $list; do if [ ! -f "$file" ]; then echo "MISSING: $file"; fi; done
MISSING: ./two
MISSING: three.txt
Yol adı genişletme (globbing) dosyaları takip etmenin daha iyi/daha güvenli bir yolunu sağlar. Sonra da bash diziler kullanabilirsiniz:
$ a=(*.txt *.bmp)
$ declare -p a
declare -a a=([0]="one.txt" [1]="two three.txt" [2]="foo.bmp")
$ for file in "${a[@]}"; do ls -l "$file"; done
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 one.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 two three.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 foo.bmp
Bash FAQ bash programlama hakkında diğer mükemmel ipuçları çok var.
için tırnak kullanmanız gerekir boşluklarla dosya adları ile başa çıkmak için ' $ list 'değişkeni, daha sonra" $ list "içinde" i "olarak; echo $ i yapın; done'. Çift tırnak işareti olmadan komut dosyanız her "dosya adı this.jpg" dosyasını üç dosya olarak ele alacaktır: "dosya adı", "beğen" ve "this.jpg". – ash108