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:
-exec
Yüklem yürütür sh -c 'file -b $0 | grep -q text' FILENAME
her biri için FILENAME
bu 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 text
değiştirir $0
.
file
Program, her dosyanın içeriği tipini belirler ve bu bilgiyi verir. Bu -b
seç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
grep
ile daha da geçirilir sh
için find
ve 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
-print
komut yürütülür (yani test edilen dosyanın adı yazdırılır).