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 fileperintah untuk menentukan tipe konten file. Tetapi itu bukan ide yang baik untuk dijalankan filesetelah 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
-execpredikat mengeksekusi sh -c 'file -b $0 | grep -q text' FILENAMEuntuk setiap FILENAMEyang 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 $0dengan nama file.
- The
fileProgram menentukan jenis konten setiap file dan output informasi ini. The -bmencegah opsi mencetak nama setiap file diuji.
grepmemfilter output yang berasal dari fileprogram, mencari baris yang berisi "teks" . (Lihat sendiri, bagaimana output khas dari fileperintah terlihat.)
- Tetapi
greptidak 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
grepditeruskan oleh shke finddan bertindak sebagai hasil akhir dari seluruh " -exec sh -c 'file $0 | grep -q text' {} \;" tes.
- Dalam hal pengujian di atas dikembalikan benar ,
-printperintah dijalankan (yaitu nama file yang diuji dicetak).