個別に見つかったファイルを同じフォルダ構造にパッケージ化するには?

個別に見つかったファイルを同じフォルダ構造にパッケージ化するには?

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

関連情報