Apakah mungkin membuat ls
membedakan skrip yang dapat dieksekusi dari binari terkompilasi yang sebenarnya?
Izinnya paling sering sama (+x
), dan dengan ls -F
anda mendapatkan sufiks asterisk (*
) untuk keduanya, jadi sulit untuk membedakannya. Saya memiliki skrip untuk mengatur warna ls
, tetapi itu bergantung pada file yang dapat dieksekusi atau tidak, sehingga mereka muncul sama:
BG='01;32' # green
EX="ex=$BG" # file with execute permission
Saya tidak ingin bergantung pada ekstensi karena banyak dari file ini tidak memilikinya.
Saya menginginkan ini, jadi ketika saya melihat beberapa pesan kesalahan yang aneh dan berpikir, "Kode apa yang menyebabkannya?", Saya tahu apakah aman untuk cat
filenya.
Jika tidak ada solusi standar, bagaimana dengan mengurai output file
, dalam satu fungsi umum, dan menyisipkan beberapa tanda khusus? Atau apakah itu terlalu lambat untuk ls
?
Jawaban yang Diterima:
Anda perlu melihat isi file untuk membedakan antara binari dan skrip. ls
tidak akan melakukan ini, ini hanya melihat nama file dan metadata (jenis, izin, dll.).
Ini adalah pengurai kasar untuk file
yang mewarnai skrip dan binari secara berbeda. Ini bertindak seperti ls -d
; menambahkan metadata akan membutuhkan pekerjaan patch-up yang membutuhkan pendekatan yang lebih langsung (misalnya dalam Perl atau Python); gunakan lsx somedir/*
untuk membuat daftar isi direktori. Nama file diasumsikan tidak mengandung baris baru atau titik dua (Anda dapat mengubah :
pemisah untuk beberapa string lain dengan -F
pilihan untuk file
).
lsx () { file -iN -- "[email protected]" | sementara IFS=baca -r baris; lakukan nama=${baris%%:*}; type=${line#*:} color=0 case $type in application/x-executable*) color='32';; teks/x-shellscript*) color='01;32';; aplikasi/*zip*) color='31';; esac printf'
Wildcards:Bagaimana Cara Membuat Daftar File Berakhiran `.txt` Saja Tanpa Menggunakan Karakter Titik??
Menutup Output Standar (>&-)?
Linux