Saya tahu saya dapat menemukan file menggunakan find
: find . -type f -name 'sunrise'
. Contoh hasil:
./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise
Saya juga tahu bahwa saya dapat menentukan jenis file dari file: file sunrise
. Contoh hasil:
sunrise: PEM RSA private key
Tetapi bagaimana saya bisa menemukan file berdasarkan tipe file?
Sebagai contoh, my-find . -type f -name 'sunrise' -filetype=bash-script
:
./astronomy/sunrise
./schedule/sunrise
files
find
file-command
file-types
Aliran
sumber
sumber
--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.Jawaban:
"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 berdasarkanfile
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
denganfind
untuk mendeteksi jenis file MIME biasa, dan menggunakannya untuk hanya menemukan skrip shell:atau, menggunakan
bash
,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 berjalanfile -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 sepertisementara pada sistem dengan varian
file
utilitas yang sedikit lebih tua , mungkin sajaBit yang umum adalah
/x-shellscript
substring.Perhatikan bahwa pada macOS, Anda harus menggunakan
file -bI
bukanfile -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
difind
perintah di atas, tetapi juga akan mungkin untuk melakukanatau, dengan
bash
,Terkait:
sumber
Anda dapat mengeksekusi
find
pada setiap file yang ditemukan dan kemudian menerima hasil yang Anda minati.Saya menyarankan untuk membuat pola pencarian sedekat mungkin dengan harapan Anda agar jumlah kecocokan positif palsu tetap rendah.
Berhati-hatilah bahwa file dengan baris baru dalam nama file mereka dapat menyebabkan masalah dengan pendekatan ini.
sumber
Menggunakan
perl
'sFile::LibMagic
modul:sumber