Unix sistemindeki "dosya türleri" normal dosyalar, dizinler, adlandırılmış yöneltmeler, karakter özel dosyaları, sembolik bağlantılar vb. Öğelerdir. Bunlar seçeneği find
ile filtrelenebilen dosya türleridir-type
.
Yardımcı find
program kendi başına bir "kabuk betiği", "JPEG resim dosyası" veya başka herhangi bir normal dosya arasında ayrım yapamaz . Ancak bu veri türleri, türlerini file
belirlemek için dosyaların içindeki belirli imzalara bakan yardımcı program tarafından ayırt edilebilir .
Farklı veri dosyası türlerini etiketlemenin yaygın bir yolu, kendi MIME türleridir ve file
bir dosyanın MIME türünü belirleyebilir.
Kullanımı file
ile find
MIME düzenli dosyaların türünü ve sadece kabuk komut dosyaları bulmak kullanımının tespit etmek için:
find . -type f -exec sh -c '
case $( file -bi "$1" ) in
*/x-shellscript*) exit 0
esac
exit 1' sh {} ';' -print
veya kullanarak bash
,
find . -type f \
-exec bash -c '[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} ';' \
-print
Yalnızca bu ada sahip komut dosyalarını algılamak istiyorsanız -name sunrise
önce ekleyin -exec
.
Yukarıdaki find
komut, geçerli dizindeki veya altındaki tüm normal dosyaları bulur ve bu tür her dosya için kısa bir satır içi kabuk komut dosyası çağırır. Bu komut dosyası file -bi
bulunan dosyada çalışır ve bu komutun çıktısı dizeyi içeriyorsa sıfır çıkış durumuyla çıkar /x-shellscript
. Çıktı bu dizeyi içermiyorsa, sıfırdan farklı bir çıkış durumuyla çıkar ve bu da bir find
sonraki dosyayla hemen devam etmesine neden olur . Dosyanın bir kabuk komut dosyası olduğu tespit edilirse, find
komut dosyanın yol adını çıkarmaya devam eder ( -print
sonunda başka bir eylemle de değiştirilebilecek olan).
file -bi
Komut çıktısı dosyanın MIME türü. Linux'ta (ve diğer birçok sistemde) bir kabuk komut dosyası için, bu
text/x-shellscript; charset=us-ascii
file
yardımcı programın biraz daha eski bir varyantına sahip sistemlerde ,
application/x-shellscript
Ortak bit /x-shellscript
alt dizedir.
MacOS üzerinde, kullanmak zorunda kalacağını Not file -bI
yerine file -bi
nedeniyle nedenlerle ( -i
opsiyon oldukça farklı bir şey yapar). MacOS'taki çıktı bir Linux sistemininkine benzer.
Eğer başkasıyla bunu yapabilir, her bulunan kabuk senaryo üzerinde bazı özel eylemi gerçekleştirmek istediğiniz misiniz -exec
yerine -print
de find
yukarıdaki komutları, ama aynı zamanda yapmak mümkün olacaktır
find . -type f -exec sh -c '
for pathname do
case $( file -bi "$pathname" ) in
*/x-shellscript*) ;;
*) continue
esac
# some code here that acts on "$pathname"
done' sh {} +
veya bash
,
find . -type f -exec bash -c '
for pathname do
[[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue
# some code here that acts on "$pathname"
done' bash {} +
İlişkili:
--filetype
komutu veya size dosya türünü söyleyecek başka bir seçenek yoktur . Yapabileceğiniz tek şey kullanmak--exec file {} \;
ve daha sonragrep Bourne
bash komut dosyalarıgrep Perl
arıyorsanız ya da Perl komut dosyaları ya da bu satırlar boyunca bir şey arıyorsanız onu içine boru .