Okunabilir dosya adlarını filtrelemek için, [:print:]( yazdırılabilir ) karakter sınıfı adını kullanabilirsiniz. Bu sınıflar hakkında daha fazla bilgiyi kılavuzunda bulabilirsiniz grep.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
İkinci bir düşüncede, "insan tarafından okunabilir" gereksinimi dosyanın adı yerine dosyanın içeriğine atıfta bulunabilir. Başka bir deyişle, metin dosyaları arıyor olacaksınız . Bu biraz daha zor. @D_Bye bir yorumda önerildiği gibi file, dosya içerik türünü belirlemek için komutu kullanmalısınız . Ancak file, bir kanaldan sonra çalıştırmak iyi bir fikir olmaz, çünkü dosyanın adını görüntüleme görevini zorlaştırır. İşte önerim:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
file-Part'ın çalışma şekli kısaca şöyle:
-execYüklem yürütür sh -c 'file -b $0 | grep -q text' FILENAMEher biri için FILENAMEbu tatmin önceki tüm durumlar (tipi, boyutu, yürütülemez).
- Bu dosyaların her biri için bir kabuk (
sh), bu kısa komut dosyasını çalıştırır : dosya adıyla file -b $0 | grep -q textdeğiştirir $0.
fileProgram, her dosyanın içeriği tipini belirler ve bu bilgiyi verir. Bu -bseçenek, test edilen her dosyanın adının yazdırılmasını önler.
grep"metin"file içeren satırları arayarak programdan gelen çıktıyı filtreler . ( Komutun tipik bir çıktısının nasıl göründüğünü kendiniz görün .)file
- Ancak
grep, filtrelenen metni vermez, çünkü verilen -q(sessiz) seçeneği vardır. Ne, sadece kendi değiştirecek gelmez çıkış durumu birine 0( "true" temsil - filtrelenmiş metin bulunmuştur) veya 1 (- Metin "hatası" anlamına "metin" den çıktıda görünmüyor file).
- Gelen doğru / yanlış çıkış durumu
grepile daha da geçirilir shiçin findve bütün "nihai sonucu olarak görür -exec sh -c 'file $0 | grep -q text' {} \;" test.
- Yukarıdaki testin true olarak dönmesi durumunda
-printkomut yürütülür (yani test edilen dosyanın adı yazdırılır).