zip: Bağımsız değişken listesi çok uzun (toplamda 80.000 dosya)


14

80.000 dosyayı birden fazla zip dosyasına sıkıştırmam gerekiyor. Kullandığım komut bu:

zip -s 200M photos_test/*

Ancak aşağıdaki hatayı alıyorum:

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

Klasör dosyalarını el ile bölmenin yanı sıra sorunu çözmek için ne yapabilirim?

Teşekkürler


1
Hata -bash: /usr/bin/zip: Argument list too longşu durumda olabilir: 1- -ranahtar kullanmadığı için , 2- arşivlemek için çok fazla dosya var. İlk durumda @ Mat'ın cevabı doğrudur ve ikinci durumda @ IgnacioVazquez-Abrams'ın cevabı doğrudur.
shgnInc

Yanıtlar:


14

Dizinin tamamını istiyorsanız, -ranahtarı kullanabilirsiniz :

zip -r -s 200M myzip photos_test

Buna photos_testrağmen tüm alt dizinleri içerecektir .


Önerdiğiniz şeyi yaptım ve küçük bir myzip.zip (7mb) ve segmentler (her biri 200mb) var. Ancak, içeriği unzip edemiyorum, unzip unix myzip.zip çalıştırıyorum ama "kötü zipfile ofset (lseek)" alıyorum. Ayrıca, onları Windows ortamında da çıkarmam gerekiyor ve orada sadece sanırım Windows 7 çıkarıcı var.
aneuryzm

bunlar farklı sorular, bunun için başka bir soru açın (referans için bu soruya bağlantı verin). emin (ama ilk ve son, en azından, hepsi değil) oluşturulan zip dosyaları isimlerini yayınlamak yapmak ve kesin komut satırı kullanmak.
Mat

9

Sorun "*" ın genişlemesi gibi görünüyor. Klasör adını veya "." Kullanın:

Kök klasörü zip içine eklemek istiyorsanız:

zip -r my.zip folder_with_80k_files

Kök klasörü zip içine eklemek istemiyorsanız:

cd folder_with_80k_files
zip -r my.zip .

5
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M

3
Kullan find . -mindepth 1 -maxdepth -name '*.json' | zip {YOURZIPFILENAME}.zip -@sen bölünmüş gerekiyor ve uzantısı tarafından dosyaları seçmek için istemiyorsanız.
Daniel Sokolowski

3

ls photos_test | zip -s 200M -@ photos

  • -@zip dosyasının stdin'den bir dosya listesini okumasına neden olur
  • |boru arasındaki bir çıkış bölgesinin lsiçine girişi arasında zipkomut

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).
⋮
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.