for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
Dadurch werden die .zip
Dateien mit weniger als 15 zu stdout-Dateien (im Terminal) aufgelistet. Wenn Sie also eine Listendatei erstellen möchten, können Sie diese tee
ausgeben oder umleiten. Hier ist es besser lesbar, am Ende eine Listendatei zu erstellen und im Terminal zu drucken
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
Anmerkungen
for z in *.zip
Durchlaufen Sie Dateien, die mit enden, .zip
und tun Sie etwas mit jeder Datei , dargestellt durch die Variable, auf die z
verwiesen wird$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
Entpacken Sie die Dateien, extrahieren Sie die Nummer aus der Ausgabe (es gibt sicherlich eine übersichtlichere Möglichkeit, nur die Nummer zu extrahieren, aber ich weiß, sed
dass ich sie verwendet habe - siehe @ murus Kommentar für eine einfachere Methode, die bei vielen Dateien möglicherweise schneller ist). und testen Sie, ob es weniger als 15 ist und ob es ist
echo "$z"
Drucken Sie dann den Dateinamen
| tee small-zip-list
Drucken Sie die Ausgabe auch in eine neue Datei sowie im Terminal
zipinfo
zipinfo -1 foo.zip | wc -l
zipinfo -t foo.zip | awk '{print $1}'
Eine späte Python-Option mit
python
'szipfile
(wie von @muru vorgeschlagen, danke!)Wie benutzt man
get_zips.py
Führen Sie es mit dem Verzeichnis und der gewünschten (minimalen) Anzahl von Dateien aus, z.
Erläuterung
Das Skript:
listet
.zip
Dateien in einem Verzeichnis auf:Schaut in die Datei und zählt die Anzahl der Dateien:
Druckt die Datei (+ Pfad) nur, wenn die Anzahl der aufgelisteten Elemente kleiner ist
n
.quelle
Mit awk :
Oder es kann auch mit Skript gemacht werden.
Erstellen Sie das Skript zip.sh
Speichern Sie es im Home-Ordner und machen Sie es ausführbar mit
chmod +x zip.sh
und führen Sie es vom Terminal aus./zip.sh
Hier
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,,unzip -l $i
Es zählt die Anzahl der Dateien aus der jeweiligen Zip-Datei und aus ihrer Ausgabe.awk 'END {print $(NF-1)}'
grep nur diese Zählnummer, wenn es weniger als 15 ist, wird der Dateiname gedruckt.quelle
Perl hat auch ein Paket für die Verwaltung von Zip-Archiven
Archive::Zip
. Das folgende Skript verwendet Zip-Dateien als Befehlszeilenargumente und bietet eine Befehlszeilenausgabe mit Name und Anzahl der Dateien im Archiv.Testlauf:
quelle
quelle
Holen Sie sich die Gesamtzahl der Dateien mit zipinfo:
quelle