for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
Ini mencantumkan .zip
file dengan kurang dari 15 file ke stdout (di terminal), jadi jika Anda ingin membuat file daftar, Anda bisa tee
keluar atau mengarahkan. Ini dia lebih mudah dibaca, membuat file daftar di akhir serta mencetak di terminal
for z in *.zip; do
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then
echo "$z"
fi
done | tee small-zip-list
Catatan
for z in *.zip
loop atas file yang diakhiri dengan .zip
dan melakukan sesuatu untuk masing-masing, diwakili oleh variabel yang z
dirujuk dengan$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
buat unzip hitung file, ekstrak nomor dari output (pasti ada cara yang lebih rapi untuk mengekstrak hanya nomor, tapi saya tahu sed
jadi saya sudah menggunakannya - lihat komentar @ muru untuk cara sederhana yang mungkin lebih cepat dengan banyak file) dan uji apakah kurang dari 15, dan jika ya
echo "$z"
lalu cetak nama file
| tee small-zip-list
juga mencetak output ke file baru, serta di terminal
zipinfo
:zipinfo -1 foo.zip | wc -l
atauzipinfo -t foo.zip | awk '{print $1}'
Opsi python terlambat, menggunakan
python
'szipfile
, (seperti yang disarankan oleh @muru, terima kasih!)Cara Penggunaan
get_zips.py
Jalankan dengan direktori dan jumlah file yang diinginkan (minimal), misalnya:
Penjelasan
Naskah:
daftar
.zip
file di dalam direktori:Lihat ke dalam file dan menghitung jumlah file:
Hanya mencetak file (+ path) jika jumlah item yang terdaftar lebih kecil
n
.sumber
Menggunakan awk :
Atau bisa juga dengan script.
Buat skrip zip.sh
Simpan di folder rumah & Jadikan itu dapat dieksekusi dengan
chmod +x zip.sh
dan jalankan dari terminal./zip.sh
Di sini
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,unzip -l $i
itu akan menghitung jumlah file dari masing-masing file zip & dari outputnya,awk 'END {print $(NF-1)}'
grep yang hanya menghitung angka, jika kurang dari 15 maka akan mencetak nama file.sumber
Perl juga memiliki paket untuk menangani arsip zip
Archive::Zip
,. Skrip di bawah ini mengambil file zip sebagai argumen baris perintah dan memberikan output baris perintah dengan nama dan jumlah file dalam arsip.Uji coba:
sumber
sumber
Dapatkan jumlah total file menggunakan zipinfo:
sumber