2011-12-14 10 views
14

Sadece bash komut dosyasını kullanmaya başladım ve birden fazla dosya türüyle bulma komutunu kullanmam gerekiyor.Bash betiğindeki bulma komutunu kullanma

list=$(find /home/user/Desktop -name '*.pdf') 

pdf türü için bu kod çalışması ama .txt gibi birden fazla dosya türünü arama veya together.Have size bir fikrin .bmp istiyor?

cevap

19

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.

3

Bunu kullanabilirsiniz:

list=$(find /home/user/Desktop -name '*.pdf' -o -name '*.txt' -o -name '*.bmp') 

yanı sıra, aynı zamanda ".PDF" (büyük harf) uzantısı olan dosyaları yakalamak için -iname yerine -name arasında kullanmak isteyebilirsiniz.

+2

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