Untuk memfilter nama file yang dapat dibaca manusia, Anda dapat menggunakan nama kelas karakter[:print:]
(yang dapat dicetak ) . Anda akan menemukan lebih banyak tentang kelas-kelas tersebut di manual untuk .grep
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
Setelah dipikir-pikir, persyaratan "yang dapat dibaca manusia" mungkin merujuk pada konten file, alih-alih namanya. Dengan kata lain, Anda akan mencari file teks . Itu sedikit lebih rumit. Seperti yang disarankan @D_Bye dalam komentar, Anda harus menggunakan file
perintah untuk menentukan tipe konten file. Tetapi itu bukan ide yang baik untuk dijalankan file
setelah pipa, karena itu akan menyulitkan tugas menampilkan nama file. Inilah yang saya sarankan:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
Ini adalah singkat bagaimana file
-bagian bekerja:
- The
-exec
predikat mengeksekusi sh -c 'file -b $0 | grep -q text' FILENAME
untuk setiap FILENAME
yang memenuhi semua kondisi sebelumnya (jenis, ukuran, non-executable).
- Untuk masing-masing file, shell (
sh
) berjalan singkat ini naskah : file -b $0 | grep -q text
, mengganti $0
dengan nama file.
- The
file
Program menentukan jenis konten setiap file dan output informasi ini. The -b
mencegah opsi mencetak nama setiap file diuji.
grep
memfilter output yang berasal dari file
program, mencari baris yang berisi "teks" . (Lihat sendiri, bagaimana output khas dari file
perintah terlihat.)
- Tetapi
grep
tidak menampilkan teks yang difilter, karena ia memiliki opsi -q
(sunyi) yang diberikan. Apa yang dilakukannya, hanya mengubah status keluarnya menjadi 0
(yang mewakili "true" - teks yang difilter ditemukan) atau 1 (berarti "kesalahan" - teks "teks" tidak muncul pada output dari file
).
- Status keluar benar / salah berasal dari
grep
diteruskan oleh sh
ke find
dan bertindak sebagai hasil akhir dari seluruh " -exec sh -c 'file $0 | grep -q text' {} \;
" tes.
- Dalam hal pengujian di atas dikembalikan benar ,
-print
perintah dijalankan (yaitu nama file yang diuji dicetak).