En basit yaklaşım, arşivin içeriğini listelemek ve ilgili uzantının dosyalarını aramak olacaktır. Örneğin, bir zip
dosyayla:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
-sf
Seçenek söyler zip
listesine bir arşivde yer alan dosyalar. Ardından, satırın sonunda bulunan grep
bir .png
veya işaretini arar .jpg
( $
). -E
Kullandığımız böylece, normal ifadeler genişletilmiş sağlayan |
OR olarak ve -i
eş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 file
her 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
, .tgz
ya .zip
o sonra benim komut geçirilir, dosyaları (istediğiniz gibi birçok uzantıları olarak ekleyebilirsiniz). -q
Normal çıkışı var grep bastırır, hiçbir şey yazdırılır. && echo
Yalnızca Arşivin adını yazdırır grep
başarılı oldu.
foo
ama içerir dosyaları bulurfoo.png
.