2013-01-04 2 views

답변

4

이 작동합니다 : 물론

unzip -q /path/to/zipfile $(cat thetxtfile) 

는이 명령으로 시작하는 것이 바람직 비어있는 디렉토리에 발행 될 필요가있다. ,

while read thefile; do unzip -q /path/to/zipfile "$thefile"; done <thetxtfile 
+0

파일 이름 지정 방법에 따라 중단됩니다. 예를 들어 공백은 문제가됩니다. 너무 많은 파일이 있고 플랫폼의 인수 제한을 초과하는 경우에도 실패합니다. –

+0

예, 그렇습니다. 그것은 "빠른 수정"이었습니다. 전체 솔루션으로 편집하기 ... – fge

2

당신이 명령 줄에서 파일의 목록과 함께 작업하는 경우 : 공간은 파일 이름에있는 경우

참고이 작동하지 않습니다 그리고 당신은 대신이 작업을 수행 할 필요가 xargs은 항상 가장 좋은 대답입니다. 공백이있는 파일 이름을 처리하며 인수의 수를 제한합니다. 나는이 제안 :

tr '\n' '\0' <filelist.txt | xargs -0 unzip -q /path/to/zipfile 

tr '\n' '\0' <filelist.txt의 사용은 파일과 대체 신규 라인에 대한 NUL 문자의 목록을합니다. xargs -0은 nul로 구분 된 파일 목록을 읽어 와서 다음 명령의 목록에 추가합니다.

파일 이름 목록에 '\ r \ n'또는 '\ r'스타일 끝이 사용되면 중단됩니다.

+1

'xargs -d '\ n''은'tr'과'xargs -0'의 조합과 동일합니다. xargs 맨 페이지에 따르면 "유닉스 파일 이름에는 공백과 개행 문자가 포함될 수 있습니다"라는 점에 유의해야합니다. 입력이 모호하기 때문에 모든 경우에이 문제를 해결하는 것은 불가능합니다. –

+0

좋은 지적. 이론적으로 텍스트 파일을 nul 문자 (또는 파일 이름에 사용되지 않은 구분 기호)로 편집 할 수 있다고 가정하면 -0 또는 -d 인수를 사용하여 xargs로 직접 파이프 될 수 있습니다. 실제로는 파일 이름에 줄 바꿈을 넣은 사람을 다른 사람에게 경고하기 위해 공개적으로 실행하는 것이 가장 좋습니다. –

관련 문제