zipを使用して別の場所のファイルをパッケージ化する場合は、次のようになります。
zip pack.zip /home/jack/jack.txt /home/jim/jim.txt
これらのファイルは、次の構造で「pack.zip」に保存されます。
./home/jack/jack.txt
./home/jim/jim.txt
しかし、これは私が期待したものではありません。次のようにファイルをzipファイルのルートに保存したいと思います。
./jack.txt
./jim.txt
どうすればいいですか?
答え1
-j
(ジャンク)パスを削除するには、zipオプションを使用してください。
-j
--junk-pathsは、
ディレクトリ名ではなく、保存されたファイル(ジャンクパス)の名前のみを保存します。デフォルトでは、zipはフルパス(現在のディレクトリベース)を保存します。
はい
たとえば、次のようなファイルがあるとします。
$ ls */
a/:
file
b/:
file2
次のコマンドを使用して圧縮します-j
。
$ zip -j new.zip */*
adding: file (stored 0%)
adding: file2 (stored 0%)
彼らは保存されていますいいえ道:
$ unzip -l new.zip
Archive: new.zip
Length Date Time Name ("^" ==> case
--------- ---------- ----- ---- conversion)
0 2014-10-21 22:15 file
0 2014-10-21 22:14 file2
--------- -------
0 2 files
デフォルト名が同じファイルはエラーを生成します。
-j
別のパスの2つのファイルが同じ名前を持つ場合、次の使用時にエラーが発生します。
$ zip -j new2.zip */*
zip warning: first full name: a/file
second full name: b/file
name in zip file repeated: file
this may be a result of using -j
zip error: Invalid command arguments (cannot repeat names in zip file)
答え2
zipユーティリティには次のオプションがあります--junk-path
。
$ zip --junk-path pack.zip home/jack/jack.txt home/jim/jim.txt
adding: jack.txt (stored 0%)
adding: jim.txt (stored 0%)
$ unzip -l pack.zip
Archive: pack.zip
Length Date Time Name
--------- ---------- ----- ----
0 2014-10-22 07:12 jack.txt
0 2014-10-22 07:12 jim.txt
--------- -------
0 2 files