for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
Wyświetla listę .zip
plików zawierających mniej niż 15 plików na standardowe wyjście (w terminalu), więc jeśli chcesz utworzyć plik listy, możesz tee
wyjść lub przekierować. Tutaj jest to bardziej czytelne, tworząc plik listy na końcu, a także drukując w terminalu
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
Notatki
for z in *.zip
zapętlaj pliki kończące się na .zip
i zrób coś dla każdego z nich, reprezentowane przez zmienną, z
do której się odwołuje$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
rozpakuj liczenie plików, wyodrębnij liczbę z danych wyjściowych (z pewnością jest bardziej uporządkowany sposób, aby wyodrębnić tylko liczbę, ale wiem sed
, że ją wykorzystałem - zobacz komentarz @ muru dla prostszego sposobu, który może być szybszy w przypadku wielu plików) i sprawdź, czy jest mniej niż 15, a jeśli tak
echo "$z"
następnie wydrukuj nazwę pliku
| tee small-zip-list
również wypisuje dane wyjściowe do nowego pliku, a także w terminalu
zipinfo
:zipinfo -1 foo.zip | wc -l
lubzipinfo -t foo.zip | awk '{print $1}'
Późna opcja Pythona, używając
python
'szipfile
, (jak sugeruje @muru, dzięki!)Jak używać
get_zips.py
Uruchom go z katalogiem i pożądaną (minimalną) liczbą plików w środku, np .:
Wyjaśnienie
Scenariusz:
wyświetla listę
.zip
plików w katalogu:Przeszukuje plik i liczy liczbę plików:
Drukuje plik (+ ścieżkę) tylko wtedy, gdy liczba wymienionych elementów jest mniejsza niż
n
.źródło
Za pomocą awk :
Lub można to również zrobić za pomocą skryptu.
Utwórz skrypt zip.sh
Zapisz go w folderze domowym
chmod +x zip.sh
i uruchom go z terminala./zip.sh
Tutaj
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,unzip -l $i
policzy liczbę plików z odpowiedniego pliku zip i jego wyniku,awk 'END {print $(NF-1)}'
grep, który zlicza tylko liczbę, jeśli jest mniejsza niż 15, to wypisze nazwę pliku.źródło
Perl posiada również pakiet do obsługi archiwów zip,
Archive::Zip
. Poniższy skrypt przyjmuje pliki zip jako argumenty wiersza poleceń i udostępnia dane wyjściowe wiersza polecenia z nazwą i liczbą plików w archiwum.Testowe uruchomienie:
źródło
źródło
Uzyskaj całkowitą liczbę plików za pomocą zipinfo:
źródło