zip: Daftar argumen terlalu panjang (80.000 file secara keseluruhan)

13

Saya perlu mengkompres 80.000 file menjadi beberapa file zip. Ini adalah perintah yang saya gunakan:

zip -s 200M photos_test/*

Namun saya mendapatkan kesalahan berikut:

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

Apa yang bisa saya lakukan untuk mengatasi masalah ini, selain memisahkan file folder secara manual?

Terima kasih

aneuryzm
sumber
Kesalahan -bash: /usr/bin/zip: Argument list too longdapat menyebabkan dalam kasus: 1- karena tidak menggunakan -rswitch, 2 - ada terlalu banyak file untuk pengarsipan. Jadi dalam kasus pertama, jawaban Mat adalah benar dan dalam kasus kedua, jawaban @ IgnacioVazquez-Abrams benar.
shgnInc

Jawaban:

13

Jika Anda ingin seluruh direktori, Anda cukup menggunakan -rsakelar:

zip -r -s 200M myzip photos_test

Itu akan mencakup semua subdirektori photos_testsekalipun.

Tikar
sumber
Saya telah melakukan apa yang Anda sarankan dan saya memiliki myzip.zip (7mb) kecil dan segmen (masing-masing 200mb). Namun, saya tidak bisa unzip kontennya, saya menjalankan unzip unix myzip.zip tapi saya mendapatkan "offset zipfile buruk (lseek)". Selanjutnya, saya perlu mengekstraknya di lingkungan Windows juga, dan di sana saya hanya memiliki Windows 7 extractor kurasa.
aneuryzm
itu adalah pertanyaan yang berbeda, buka pertanyaan lain untuk itu (tautan ke ini untuk referensi). pastikan Anda memposting nama file zip yang dihasilkan (tidak semuanya, tapi paling tidak pertama dan terakhir), dan baris perintah persis yang Anda gunakan.
Mat
9

Masalahnya tampaknya adalah perluasan "*". Gunakan nama folder atau ".":

Jika Anda ingin memasukkan folder root di dalam zip:

zip -r my.zip folder_with_80k_files

Jika Anda tidak ingin menyertakan folder root di dalam zip:

cd folder_with_80k_files
zip -r my.zip .
stoffen
sumber
5
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M
Ignacio Vazquez-Abrams
sumber
3
Gunakan find . -mindepth 1 -maxdepth -name '*.json' | zip {YOURZIPFILENAME}.zip -@jika Anda tidak perlu membagi dan ingin memilih file dengan ekstensi.
Daniel Sokolowski
3

ls photos_test | zip -s 200M -@ photos

  • -@akan menyebabkan zip membaca daftar file dari stdin
  • |kehendak pipa merupakan keluaran dari lske masukan dari zipperintah

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).
⋮
Tuan Tao
sumber