리눅스에서 파일 목록을 압축하는 방법 grep abc

단일 디렉토리에 압축해야하는 많은 파일이 있습니다. 디렉토리의 모든 파일을 압축하고 싶지는 않지만 특정 쿼리와 일치하는 파일 만 압축하고 싶습니다.

내가 했어

grep abc file-* > out.txt 

각 파일에 모든 “abc”인스턴스가있는 파일을 만듭니다. 파일 자체가 필요합니다. bash에게 그 파일들만 압축하도록 어떻게 말할 수 있습니까?



답변

매우 간단합니다 :

zip archive -@ < out.txt

즉, out.txt파일에 줄당 하나의 파일 이름이 포함되어있는 경우 입니다. 모든 파일을 out.txt에서 하나의 아카이브에 추가합니다 archive.zip.

-@옵션은 zipSTDIN에서 읽습니다.

임시 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


답변