zip:引数リストが長すぎます(全体で80.000ファイル)


13

80.000ファイルを複数のzipファイルに圧縮する必要があります。これは私が使用するコマンドです:

zip -s 200M photos_test/*

ただし、次のエラーが表示されます。

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

フォルダーファイルを手動で分割する以外に、問題を解決するにはどうすればよいですか?

ありがとう


エラー-bash: /usr/bin/zip: Argument list too longは次の場合に発生する可能性-rがあります。1-スイッチを使用していないため、2-アーカイブするファイルが多すぎます。したがって、最初のケースでは@Matの答えは真であり、2番目のケースでは@ IgnacioVazquez-Abramsの答えは真です。
shgnInc 14

回答:


13

ディレクトリ全体が必要な場合は、単に-rスイッチを使用できます。

zip -r -s 200M myzip photos_test

photos_testただし、すべてのサブディレクトリが含まれます。


私はあなたが提案したことをしました、そして私は小さなmyzip.zip(7mb)とセグメント(それぞれ200mb)を持っています。しかし、コンテンツを解凍できません。unzipunix myzip.zipを実行していますが、「bad zipfile offset(lseek)」が表示されます。さらに、Windows環境でもそれらを抽出する必要があり、そこにはWindows 7の抽出プログラムしかありません。
動脈瘤

これらは異なる質問です。そのための別の質問を開きます(参照用にこの質問へのリンク)。生成されたzipファイルの名前(すべてではなく、少なくとも最初と最後)と、使用する正確なコマンドラインを必ず投稿してください。
マット

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からファイルのリストを読み取ります。
  • |意志パイプ出力ls中へ入力するzipコマンド

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.