답변:
for z in *.zip; do if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 )); then echo "$z"; fi; done
이 .zip
파일은 15 개 미만 의 파일 이있는 파일을 stdout (터미널에서)으로 나열하므로 목록 파일을 작성하려는 경우 tee
출력하거나 경로 재 지정할 수 있습니다 . 여기서는 더 읽기 쉽게 말미에 목록 파일을 작성하고 터미널에서 인쇄합니다.
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
for z in *.zip
파일로 끝나는 돌이 .zip
와 각 사람에게 뭔가를이 변수에 의해 표현 z
과 참조$z
if (( $(unzip -l "$z" | sed -nr '$ s/.* ([0-9]+) files?/\1/p') < 15 ))
, 파일을 계산 출력에서 번호를 추출하여 압축을 해제 할 (단지 수를 추출하는 정돈 방법은 분명히 존재하지만 내가 아는 sed
나는 그것을 사용했습니다 - 그래서 참조 muru의 코멘트 @ 빨리 많은 파일과 함께 할 수있는 간단한 방법에 대한) 15보다 작은 지 테스트하고echo "$z"
그런 다음 파일 이름을 인쇄하십시오.| tee small-zip-list
터미널뿐만 아니라 새 파일로 출력 출력 zipinfo
: zipinfo -1 foo.zip | wc -l
또는zipinfo -t foo.zip | awk '{print $1}'
늦은 파이썬 옵션을 사용하여 python
의를 zipfile
, (@muru에 의해 감사를 제안!)
#!/usr/bin/env python3
import os
import sys
from zipfile import ZipFile
dr = sys.argv[1]
for zp in [os.path.join(dr, f) for f in os.listdir(dr) if f.endswith(".zip")]:
if len(ZipFile(zp, "r").namelist()) < int(sys.argv[2]):
print(zp)
get_zips.py
디렉토리와 원하는 (최소한) 파일 수로 실행하십시오.
python3 /path/to/get_zips.py /full/path/to/directory_with_zips 15
스크립트 :
.zip
디렉토리 안에 파일을 나열 합니다.
for zp in [os.path.join(dr, f) for f in os.listdir(dr) if f.endswith(".zip")]:
파일 내부를 살펴보고 파일 수를 계산합니다.
if len(ZipFile(file, "r").namelist()) < n:
print(file)
나열된 항목 수가보다 적은 경우에만 파일 (+ 경로)을 인쇄합니다 n
.
awk 사용 :
for i in ~/path/to/your/folder/*.zip; do if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 )); then echo "$i"; fi; done
또는 스크립트를 사용하여 수행 할 수도 있습니다.
zip.sh 스크립트 작성
#!/bin/bash
for i in ~/path/to/your/folder/*.zip; do
if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 )); then
echo "$i"
fi
done
홈 폴더에 저장하고 chmod +x zip.sh
터미널에서 실행 가능하게 하고 터미널에서 실행하십시오../zip.sh
여기에서 if (( $(unzip -l $i | awk 'END {print $(NF-1)}') < 15 ))
,
unzip -l $i
각 zip 파일 및 출력에서 파일 수를 계산합니다.
awk 'END {print $(NF-1)}'
그 수를 grep하면 15보다 작 으면 파일 이름이 인쇄됩니다.
Perl에는 zip 아카이브 처리를위한 패키지도 있습니다 Archive::Zip
. 아래 스크립트는 zip 파일을 명령 줄 인수로 사용하며 아카이브 내의 파일 이름 및 개수와 함께 명령 줄 출력을 제공합니다.
#!/usr/bin/env perl
use strict;
use warnings;
use Archive::Zip;
foreach (@ARGV){
my $fh = Archive::Zip::->new();
if (my $error = $fh->read($_)){
die "Read error:" . $_;
}
if($fh->numberOfMembers() < 15 ){
printf("%s\t%d\n",$_,$fh->numberOfMembers());
}
}
시운전 :
$ ./count_zip_contents.pl *.zip
129804-findmac.py.zip 1
Re%3a_China_and_East_Asia_%5bHIS-1250-010_31616.201730%5d%3a_Team_up_for_East_Asian_History_class.zip 4
University_Formal_jpg&tif.zip 5
indicator-places-master.zip 4
lab 5.zip 8
for z in *.zip; do if (( $(unzip -Z1 "$z" | wc -l) < 15 )); then echo "$z"; fi;done