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 findile filtrelenebilen dosya türleridir-type .
Yardımcı findprogram 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 filebelirlemek 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 filebir dosyanın MIME türünü belirleyebilir.
Kullanımı fileile findMIME 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 findkomut, 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 -bibulunan 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 findsonraki dosyayla hemen devam etmesine neden olur . Dosyanın bir kabuk komut dosyası olduğu tespit edilirse, findkomut dosyanın yol adını çıkarmaya devam eder ( -printsonunda başka bir eylemle de değiştirilebilecek olan).
file -biKomut çı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
fileyardımcı programın biraz daha eski bir varyantına sahip sistemlerde ,
application/x-shellscript
Ortak bit /x-shellscriptalt dizedir.
MacOS üzerinde, kullanmak zorunda kalacağını Not file -bIyerine file -binedeniyle nedenlerle ( -iopsiyon 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 -execyerine -printde findyukarı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:
--filetypekomutu veya size dosya türünü söyleyecek başka bir seçenek yoktur . Yapabileceğiniz tek şey kullanmak--exec file {} \;ve daha sonragrep Bournebash komut dosyalarıgrep Perlarıyorsanız ya da Perl komut dosyaları ya da bu satırlar boyunca bir şey arıyorsanız onu içine boru .