이 가장 기본적인 질문은 용서하지만 스택 교환에 대한 직접적인 대답이나 간단한 예를 찾을 수 없습니다.
끔찍한 Windows 친구와 공유 할 수있는 하나의 zip 파일로 압축하고 싶은 파일 폴더가 있다고 가정 해 봅시다 (그렇지 않으면 그냥 사용 tar
하고 끝내 겠습니다 ). 다음과 같이 보입니다 :
.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
└── test.jpg
내가 zip
설치 했다고 가정하면 :
sudo apt-get install zip
man zip
파일 목록을 사용할 수 있다는 것을 알았습니다 .
-@ 파일 목록. 파일 목록이-@ [MacOS 아님]으로 지정되면 zip은 명령 줄 대신 표준 입력에서 입력 파일 목록을 가져옵니다. 예를 들어
zip -@ foo
그래서 zip.lst
다음과 같은 것을 만들었습니다 .
cat zip.lst
file1.txt
file2.txt
file3.txt
file.jpg
test.jpg
그리고 지금 시도했습니다.
zip -@ zip.lst
그러나 콘솔에 빈 줄을 만드는 것 외에는 아무것도하지 않았습니다. 그리고 나는 계속 밀어 넣을 수 Enter있으며 명령을 실행하지 않고 더 빈 줄을 계속 만듭니다. 일부 검색 후 Ctrl+ 를 눌러 입력을 종료해야 함을 깨달았습니다.D
그러나 지금이 오류가 발생합니다 :
zip warning: missing end signature--probably not a zip file (did you
zip warning: remember to use binary mode when you transferred it?)
zip warning: (if you are trying to read a damaged archive try -F)
zip error: Zip file structure invalid (zip.lst)
뭐!? 간단한 목록이 어떻게 "유효한 파일 구조"가 아닌가? 자세한 내용은 설명서로 돌아가서 자세히 살펴보십시오.
파일 목록이-@ ...로 지정된 경우
그래서 나는 그것을 시도하지 않고 -@
적어도 Ctrl+ 를 누르지 않고 즉시 처리 D하지만 같은 오류가 남습니다 .
운 좋게도 나는 거의 관련이없는 질문에 대한 답변에 대한 의견 을 발견 하여 zip 파일의 이름을 명시 적으로 지정해야한다는 것을 깨달았습니다. 이 오류는 기본적으로이라는 zip 파일을 만들려고했기 때문에 발생했습니다 zip.lst
. 그러나 그것이 내 목록의 이름이기 때문에 단순히 목록을 덮어 쓰겠다고 생각할 수도 있지만 실제로는 업데이트하려고 시도하지 않았습니다. 그리고 목록은 분명히 zip 파일이 아니기 때문에 유효하지 않은 파일 구조 오류가 발생하며 이제 왜 "zip 파일이 아닌 것"이라고 말했는지 분명합니다. 그래서 나는 시도했다 :
zip files.zip zip.lst
adding: zip.lst (deflated 35%)
유레카! zip 파일이 생성되었으며 내 폴더에 다음이 포함되어 있습니다.
.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
├── files.zip
├── test.jpg
└── zip.lst
그러나 축하하기 전에 먼저 zip 파일의 내용을 확인하십시오.
unzip -l files.zip
Archive: files.zip
Length Date Time Name
--------- ---------- ----- ----
48 2016-05-24 15:30 zip.lst
--------- -------
48 1 file
아니! 글쎄, 실제로 그것은 내가 준 하나의 목록 파일을 압축했기 때문에 표준 사용법에서 의미가 있습니다. 마침내 나는 다시 시도했지만 -@
같은 결과를 얻었습니다.
내가 도대체 뭘 잘못하고있는 겁니까?
BTW, GUI를 사용하고 마우스로 할 수 있다는 것을 알고 있지만 스크립트를 작성해야하며 일반적으로 내가하는 일을 알면 CLI 속도가 빠릅니다.
ls
과grep
및 우편의를-@
, 당신은 우편 명령 줄 예를 들어, 직접 파일을 선택 쉘 globs의를 사용할 수 있습니다zip files.zip file*
또는zip images.zip *.jpg
. 또한 파일에서 파일 이름 목록을 사용할 때 별도의 cat 프로세스를 호출하는 대신 리디렉션을 사용할 수 있습니다.zip files.zip -@ < zip.lst