Jika saya menggunakan find
perintah seperti ini:
find /mydir/mysubdir -executable -type f
semua file yang dapat dieksekusi terdaftar (tidak termasuk direktori), dan termasuk file skrip yang dapat dieksekusi (seperti script.sh, dll). Yang ingin saya lakukan adalah daftar hanya file biner yang dapat dieksekusi.
Jawaban:
Anda dapat mencoba
file
utilitas tersebut. Menurut halaman manual:Anda mungkin harus bermain-main dengan ekspresi reguler tetapi sesuatu seperti:
File memiliki banyak opsi, jadi Anda mungkin ingin melihat lebih dekat halaman manual. Saya menggunakan opsi pertama yang saya temukan yang sepertinya menghasilkan keluaran dengan mudah.
sumber
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Ini hanya akan memberi Anda file (dan dengan demikian dapat diteruskan ke perintah berikutnya yang ingin dijalankan)find
denganbrew install findutils
atausudo port install findutils
dan kemudian Anda dapat menjalankan doa seperti ini untuk efek yang serupa:gfind . -type f -executable -exec file '{}' \; | grep -i execut
Berikut adalah cara untuk mengecualikan skrip, yaitu file yang dua karakter pertamanya adalah
#!
:Untuk beberapa jenis file, tidak jelas apakah Anda ingin mereka diklasifikasikan sebagai skrip atau biner, misalnya file bytecode. Tergantung pada bagaimana hal-hal diatur, ini mungkin atau mungkin tidak dimulai
#!
. Jika ini penting bagi Anda, Anda harus membuat skrip shell bagian dalam lebih kompleks. Misalnya, berikut ini cara Anda memasukkan program ELF binari dan Mono executables dan Objective Caml bytecode tetapi tidak jenis executable lainnya seperti skrip shell atau skrip perl atau program bytecode JVM:sumber
Kalau-kalau Anda menemukan diri Anda pada sistem dengan downlevel
find
(masih, seperti yang saya tulis, cluster ilmu pengetahuan lotta menjalankan RHEL5!) Tanpa hak untuk memperbarui: bukannyadalam jawaban yang sangat baik di atas, Anda dapat melakukan, misalnya,
yang mencari bit izin. Sayangnya di atas hanya menemukan file yang pengguna dapat dieksekusi, tetapi itu biasanya bekerja untuk saya.
sumber