Saya ingin memindai hard drive saya untuk semua koleksi file terkompresi seperti zip, gzip, bzip, dan lainnya dan memiliki konten yang dicari untuk jenis file tertentu (seperti gambar). Anti-virus lakukan, jadi saya percaya harus ada jalan.
Saya ingin memindai hard drive saya untuk semua koleksi file terkompresi seperti zip, gzip, bzip, dan lainnya dan memiliki konten yang dicari untuk jenis file tertentu (seperti gambar). Anti-virus lakukan, jadi saya percaya harus ada jalan.
Jawaban:
Pendekatan yang paling sederhana adalah dengan mendaftar isi arsip dan mencari file dari ekstensi yang relevan. Misalnya, dengan zip
file:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
The -sf
pilihan memberitahu zip
ke dalam daftar file yang terdapat dalam arsip. Kemudian, grep
akan mencari .png
atau .jpg
yang ada di akhir baris ( $
). The -E
memungkinkan diperpanjang ekspresi reguler, sehingga kita dapat menggunakan |
sebagai OR dan -i
membuat kasus pencocokan tidak sensitif.
Namun, setiap alat arsip memiliki perintah berbeda untuk membuat daftar konten. Saya telah menulis sebuah skrip yang dapat menangani sebagian besar yang lebih populer. Jika Anda menyimpan skrip itu sebagai list_compressed.sh
, Anda dapat menjalankan:
list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'
Itu akan menunjukkan kepada Anda tipe gambar yang paling umum. Perhatikan bahwa pendekatan ini mengasumsikan bahwa tipe file dapat ditentukan oleh ekstensi file. Itu tidak akan menemukan file gambar yang tidak memiliki ekstensi dan itu tidak akan mengenali file dengan ekstensi yang salah. Tidak ada cara untuk mengatasinya tanpa benar-benar mengekstraksi file dari arsip dan menjalankannya file
masing-masing.
Jika Anda ingin menemukan semua arsip yang berisi file gambar di hard drive Anda, gabungkan yang di atas dengan 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
Perintah find akan mencari semua .gz
, .tgz
atau .zip
file (Anda dapat menambahkan ekstensi sebanyak yang Anda suka), yang kemudian melewati skrip saya. The -q
Menekan grep output normal, tidak ada yang akan dicetak. The && echo
akan mencetak nama arsip hanya jika grep
berhasil.
-name
untuk -iname
. Namun, ada sedikit gunanya, banyak program kompresi (gzip, misalnya) membutuhkan ekstensi spesifik. GZ
tidak akan bekerja
Tidak semaju terdon, tetapi ini akan berhasil:
Simpan kode berikut, dalam folder tempat semua kode Anda berada, seperti finda.sh
, atau nama lain yang Anda inginkan:
for file in *.*; do
if ( 7z l -slt "$file"> /tmp/$file.log); then
echo $file:; cat /tmp/$file.log | grep -iE 'Path*'> $file.log && cat $file.log
fi
done
Kemudian dalam direktori semua arsip Anda berada, jalankan dan inilah hasilnya:
./finda.sh
one.7z:
Path = one/abradabra.png
Path = one/birb.png
three.rar:
Path = three/blah.png
Path = three/qwa0g.jpg
two.zip:
Path = two/whut.png
*.*
hanya akan mencocokkan file dengan ekstensi. Selain itu, ini akan mencantumkan semua file di semua arsip, Anda tidak menguji untuk jenis file apa pun.
foo
tetapi tidakfoo.png
.