zip : 인수 목록이 너무 깁니다 (전체적으로 80.000 개 파일)


14

80.000 파일을 여러 개의 zip 파일로 압축해야합니다. 이것이 내가 사용하는 명령입니다.

zip -s 200M photos_test/*

그러나 다음과 같은 오류가 발생합니다.

-bash: /usr/bin/zip: Argument list too long

폴더 파일을 수동으로 분할하는 것 외에이 문제를 해결하려면 어떻게해야합니까?

감사


오류 -bash: /usr/bin/zip: Argument list too long는 다음과 같은 경우에 발생할 수 있습니다. 1- -r스위치를 사용하지 않아서 , 2- 아카이브 할 파일이 너무 많습니다. 따라서 첫 번째 경우 @Mat의 대답은 사실이고 두 번째 경우 @ IgnacioVazquez-Abrams의 대답은 사실입니다.
shgnInc

답변:


14

전체 디렉토리를 원하면 -r스위치 를 사용하면됩니다 .

zip -r -s 200M myzip photos_test

여기에는 모든 하위 디렉토리가 포함됩니다 photos_test.


나는 당신이 제안한 것을 완료했으며 작은 myzip.zip (7mb)과 세그먼트 (각 200mb)가 있습니다. 그러나 내용의 압축을 풀 수 없으며 unzip unix myzip.zip을 실행 중이지만 "bad zipfile offset (lseek)"이 나타납니다. 또한 Windows 환경에서도 추출해야하며 Windows 7 추출기 만 있습니다.
aneuryzm

그것들은 다른 질문입니다, 그에 대한 다른 질문을여십시오 (참조를 위해 이것에 대한 링크). 생성 된 zip 파일의 이름 (모두는 아니지만 적어도 첫 번째 및 마지막)과 사용하는 정확한 명령 줄을 게시 해야합니다.
Mat

9

문제는 "*"의 확장 인 것 같습니다. 폴더 이름 또는 "."을 사용하십시오.

zip 내에 루트 폴더를 포함 시키려면 다음을 수행하십시오.

zip -r my.zip folder_with_80k_files

zip 안에 루트 폴더를 포함시키지 않으려면 :

cd folder_with_80k_files
zip -r my.zip .


3

ls photos_test | zip -s 200M -@ photos

  • -@zip이 stdin 에서 파일 목록을 읽게합니다.
  • |명령 의 입력 으로 출력 을 파이프합니다lszip

man zip:

USE
⋮
   -@ file lists.  If a file list is specified as -@ [Not on MacOS], zip takes
   the  list  of  input  files from standard input instead of from the command
   line.  For example,

          zip -@ foo

   will store the files listed one per line on stdin in foo.zip.

   Under Unix, this option can be used to powerful effect in conjunction  with
   the  find (1)  command.   For example, to archive all the C source files in
   the current directory and its subdirectories:

          find . -name "*.[ch]" -print | zip source -@

   (note that the pattern must be quoted to keep the shell from expanding it).
⋮
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.