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


18

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

내가 했어

grep abc file-* > out.txt 

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


와일드 카드가 작동하지 않습니까? 왜? 내가 요청할 수 있다면 ...
jherran

@ jherran 디렉토리의 모든 파일을 압축하고 싶지는 않으며 특정 쿼리와 일치하는 파일 만 압축하고 싶습니다. 내가 한 grep abc file-* > out.txt모든 사용하여 파일을 만들 경우 각 파일에 "ABC"의. 파일 자체가 필요합니다.
john mangual

@jherran이 의미 zip ZipFile.zip file-*하는 것은입니다. find다른 검색에서 복잡한 파일 목록 또는 복잡한 파일 목록을 사용하는 경우에만 중간 파일이 필요합니다 .
AFH

답변:


32

매우 간단합니다 :

zip archive -@ < out.txt

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

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

임시 out.txt파일 작성을 건너 뛰려면 grep의 기능을 사용 하여 파일 이름도 인쇄 할 수 있습니다 . -r재귀 검색을 가능하게하고 (귀하의 경우 필요하지 않을 수도 있음) -l파일 이름 만 인쇄합니다.

grep -rl "abc" file-* | zip archive -@

파일 이름에 공백이있는 목록 파일이 있다는 것을 제외하고는 잘 작동합니다. 나는``로 이스케이프 처리를 시도하고 파일 이름 (한 줄-하나의 파일 이름) 주위에 따옴표없이 한 번 따옴표없이 이스케이프 처리하지 않았습니다. 지금까지 아무것도 효과가 없었습니다.
Thomas W.

2
나는`\`이스케이프 된 공백으로 작업하고 파일에 인용 부호가 없으며 다음을 수행했습니다.cat out.txt | while read line ; do xargs zip archive.zip $line ; done
Thomas W.

비슷한 이름의 파일을 압축하려면 다음을 시도해보십시오zip archive.zip $(ls common_name*)
chepe263

@ chepe263 파일 경로에 공백이 있으면 중단됩니다. 일반적으로 ls 출력을 구문 분석하지 않는 것이 좋습니다.
slhck

검색 엔진 인덱싱에 의해 여기에 상처를 입힌 맥을 가진 다른 누군가를 위해, -@옵션 페이지는 10.16부터 잘 작동합니다. 맨 페이지에는 여전히 언어에 대한 내용이 포함되어 있지만not on MacOS
Aidan Miles

0

여기 에서 허용되는 답변에 대한 대안 :

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.