En basit yaklaşım, arşivin içeriğini listelemek ve ilgili uzantının dosyalarını aramak olacaktır. Örneğin, bir zipdosyayla:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
-sfSeçenek söyler ziplistesine bir arşivde yer alan dosyalar. Ardından, satırın sonunda bulunan grepbir .pngveya işaretini arar .jpg( $). -EKullandığımız böylece, normal ifadeler genişletilmiş sağlayan |OR olarak ve -ieşleştirme vaka duyarsız hale getirir.
Ancak, her arşiv aracının içeriği listelemek için farklı bir komutu vardır. En popüler olanların çoğuyla başa çıkabilen bir senaryo yazdım . Bu komut dosyasını olarak kaydederseniz list_compressed.sh, şunları çalıştırabilirsiniz:
list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'
Bu size en yaygın resim türlerini gösterir. Bu yaklaşımın dosya türünün dosyanın uzantısı tarafından belirlenebileceğini varsaydığını unutmayın. Uzantısı olmayan resim dosyalarını bulamaz ve yanlış uzantıya sahip dosyaları tanımaz. Dosyaları arşivden çıkarmadan ve fileher birinde çalıştırmadan bununla başa çıkmanın bir yolu yoktur .
Sabit sürücünüzde görüntü dosyaları içeren tüm arşivleri bulmak istiyorsanız , aşağıdakileri birleştirin find:
find / -name '*.gz' -o -name '*.tgz' -o -name '*.zip' -print0 |
while IFS= read -r -d '' arch; do
list_compressed.sh "$arch" |
grep -qiE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$' &&
echo "$arch contains image(s)"
done
Bulmak komutu tüm arayacaktır .gz, .tgzya .zipo sonra benim komut geçirilir, dosyaları (istediğiniz gibi birçok uzantıları olarak ekleyebilirsiniz). -qNormal çıkışı var grep bastırır, hiçbir şey yazdırılır. && echoYalnızca Arşivin adını yazdırır grepbaşarılı oldu.
fooama içerir dosyaları bulurfoo.png.