"Jenis file" pada sistem Unix adalah hal-hal seperti file biasa, direktori, pipa bernama, file karakter khusus, tautan simbolik dll. Ini adalah jenis file yang find
dapat difilter dengan -type
opsi ini.
Itu find
utilitas tidak dapat dengan sendirinya membedakan antara "script shell", "file gambar JPEG" atau lainnya jenis file biasa . Namun tipe data ini dapat dibedakan berdasarkan file
utilitas, yang melihat tanda tangan tertentu di dalam file itu sendiri untuk menentukan tipe mereka.
Cara umum untuk memberi label berbagai jenis file data adalah dengan jenis MIME mereka , dan file
dapat menentukan jenis file MIME.
Menggunakan file
dengan find
untuk mendeteksi jenis file MIME biasa, dan menggunakannya untuk hanya menemukan skrip shell:
find . -type f -exec sh -c '
case $( file -bi "$1" ) in
*/x-shellscript*) exit 0
esac
exit 1' sh {} ';' -print
atau, menggunakan bash
,
find . -type f \
-exec bash -c '[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} ';' \
-print
Tambahkan -name sunrise
sebelum -exec
jika Anda hanya ingin mendeteksi skrip dengan nama itu.
The find
perintah di atas akan menemukan semua file reguler dalam atau di bawah direktori saat ini, dan untuk setiap panggilan file tersebut pendek in-line shell skrip. Script ini berjalan file -bi
pada file yang ditemukan dan keluar dengan status keluar nol jika output dari perintah itu berisi string /x-shellscript
. Jika output tidak mengandung string itu, ia keluar dengan status keluar non-nol yang menyebabkanfind
untuk segera melanjutkan dengan file berikutnya. Jika file tersebut ditemukan sebagai skrip shell, find
perintah akan melanjutkan untuk menampilkan pathname file (yang -print
pada akhirnya, yang juga bisa diganti dengan beberapa tindakan lain).
The file -bi
perintah akan menampilkan jenis MIME file. Untuk skrip shell di Linux (dan sebagian besar sistem lainnya), ini akan menjadi sesuatu seperti
text/x-shellscript; charset=us-ascii
sementara pada sistem dengan varian file
utilitas yang sedikit lebih tua , mungkin saja
application/x-shellscript
Bit yang umum adalah /x-shellscript
substring.
Perhatikan bahwa pada macOS, Anda harus menggunakan file -bI
bukan file -bi
karena alasan ( -i
opsi melakukan sesuatu yang sangat berbeda). Output pada macOS mirip dengan sistem Linux.
Apakah Anda ingin melakukan beberapa tindakan kustom pada setiap shell script yang berhasil ditemukan, Anda bisa melakukannya dengan yang lain -exec
di tempat -print
di find
perintah di atas, tetapi juga akan mungkin untuk melakukan
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 {} +
atau, dengan 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 {} +
Terkait:
--filetype
opsi untuk perintah find atau apa pun yang akan memberi tahu Anda jenis file. Satu-satunya hal yang dapat Anda lakukan adalah menggunakan--exec file {} \;
dan kemudian memasukkannya ke dalamgrep Bourne
jika Anda mencari skrip bash ataugrep Perl
jika Anda mencari skrip Perl atau semacamnya.