Linux의 zip 아카이브에서 단일 파일 제거


75

zip 아카이브 ( -j -r플래그 가있는 스크립트에서 자동으로 생성됨 )가 있으며 단일 파일을 제거하고 싶습니다. 나는 문서화 된대로 시도했다.

zip -d "picture_43_9.jpg" gallery.zip

하지만이 오류가 발생합니다 :

zip warning: picture_43_9.jpg not found or empty   
zip error: Nothing to do! (picture_43_9.jpg)  

어쨌든, 거기에 있다 아카이브 내부의 이러한 파일과 비어되지 않습니다 :

unzip -l .../gallery.zip | grep -i 43_9.jpg  
1477092  2013-05-22 14:23   picture_43_9.jpg 

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

답변:


103

인수가 바뀌 었습니다. 이 시도:

zip -d gallery.zip "picture_43_9.jpg" 

로부터 우편 (1) 매뉴얼 페이지

-d
--delete
Zip 보관 파일에서 항목을 제거 (삭제)합니다. 예를 들면 다음과 같습니다.

zip  -d  foo  foo/tom/junk  foo/harry/\*  \*.o

항목 foo/tom/junk,로 시작하는 foo/harry/모든 파일 및 .o(경로로) 끝나는 모든 파일을 제거합니다 . 그래서, 그 쉘 경로 확장은 백 슬래시 억제 된 참고 지퍼 있도록 별표를 볼 수있는 지퍼 의 내용에 일치하도록 우편 대신 현재 디렉토리의 내용을 아카이브. 백 슬래시는 MSDOS 기반 플랫폼에서 사용되지 않습니다. 인용 부호를 사용하여 별표를 이스케이프 처리 할 수도 있습니다.

zip -d foo foo/tom/junk "foo/harry/*" "*.o"

쉘이 와일드 카드를 확장하는 시스템에서 별표를 이스케이프하지 않으면 별표가 현재 디렉토리의 파일 목록으로 변환되고 해당 목록은 아카이브에서 항목을 삭제하는 데 사용됩니다.

MSDOS에서 -dzip 아카이브의 이름과 일치 할 때 대소 문자를 구분합니다 . MSDOS 시스템에서 PKZIP로 압축 된 경우 파일 이름을 대문자로 입력해야합니다. (우리는 경로가 대소 문자를 구분하지 않는 시스템 에서이 대소 문자를 구분하지 않는 것으로 간주했지만, 아카이브가 대소 문자가 중요하고 아카이브에 아카이브에 별도의 파일 Bar과 두 bar파일을 모두 포함 할 수있는 시스템에서 아카이브를 가져올 수 있습니다 .) 그러나 새로운 옵션 - ic 는 아카이브에서 대소 문자를 무시합니다.


네가 맞아, 고마워, 나는 zip의 명령 행 도움에 혼란스러워했다 zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
Alex Flo

@AlexFlo : 맨 페이지의 복사본이 잘못되었을 수 있습니다. 위에 인용 된 사본 에는 "[ zipfile [ file… ]]"라고 표시되어 있습니다. 이는 (a) 파일 이름 인수를 전혀 사용할 수 없음을 의미합니다 (도움을 요청할 때 외에는 어떻게 유효한지 알 수는 없지만) ), (b) zipfile (아카이브 파일) 이름 만 또는 (c) zipfile 이름 뒤에 하나 이상의 일반 파일 이름 이옵니다 . (이것은 아카이브에 삽입 될 실제 파일의 이름이거나 조작 할 아카이브 멤버의 이름 일 수 있습니다.)
Scott

@AlexFlo- zip인용 한 매뉴얼 페이지에 설명 된대로 STDIN 및 파이프를 통해 파일 이름 인수를로 전달할 수 있습니다 . 당신이 들어있는 디렉토리에 있다면 예를 들어 file1.txt, file2.txt그리고 file3.txt, 당신은 실행할 수 있습니다 ls -1 | zip -q 'files.zip' -@아카이브 만들 것이다, files.zip당신이 파이프 3 개 파일이 들어있는 zip그대로 자신의 이름을 가진합니다.
rubynorails
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.