단일 디렉토리에 압축해야하는 많은 파일이 있습니다. 디렉토리의 모든 파일을 압축하고 싶지는 않지만 특정 쿼리와 일치하는 파일 만 압축하고 싶습니다.
내가 했어
grep abc file-* > out.txt
각 파일에 모든 “abc”인스턴스가있는 파일을 만듭니다. 파일 자체가 필요합니다. bash에게 그 파일들만 압축하도록 어떻게 말할 수 있습니까?
답변
매우 간단합니다 :
zip archive -@ < out.txt
즉, out.txt
파일에 줄당 하나의 파일 이름이 포함되어있는 경우 입니다. 모든 파일을 out.txt
에서 하나의 아카이브에 추가합니다 archive.zip
.
이 -@
옵션은 zip
STDIN에서 읽습니다.
임시 out.txt
파일 작성을 건너 뛰려면 grep
의 기능을 사용 하여 파일 이름도 인쇄 할 수 있습니다 . -r
재귀 검색을 가능하게하고 (귀하의 경우 필요하지 않을 수도 있음) -l
파일 이름 만 인쇄합니다.
grep -rl "abc" file-* | zip archive -@
답변
여기 에서 허용되는 답변에 대한 대안 :
cat out.txt | zip -@ zipfile.zip
cat out.txt | zip -@ - > zipfile.zip
zip zipfile.zip $(cat out.txt) -r
zip zipfile.zip -r . -i@out.txt