この最も基本的な質問はお許しください。しかし、スタック交換に関する直接的な答えや簡単な例を見つけることができませんでした。
私がひどいWindowsの友人と共有できる1つの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
番号!まあ、実際にはそれは標準の使用法から理にかなっています。なぜなら、リストファイルを圧縮しただけだからです。最後にもう一度試してみまし-@
たが、同じ結果が得られました。
私は何を間違えていますか?
ところで、GUIを使用してマウスで実行できることはわかっていますが、これをスクリプト化する必要があり、一般に、自分が何をしているのかわかっているとCLIの方が速くなります。
ls
とgrep
とジップの-@
、あなたはジップコマンドラインなどに直接ファイルを選択するために、シェルグロブを使用することができますzip files.zip file*
かzip images.zip *.jpg
。また、ファイルからファイル名のリストを使用しているとき、あなたは代わりに別の猫のプロセスを呼び出すのリダイレクトを使用することができ、zip files.zip -@ < zip.lst