サブフォルダーなしで複数のファイルを含むzipを作成する方法は?


12

初期状況:

.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

私は何をする必要がありますか:

私は休閑構造を持たなければならないd0、d1およびd4を含むzipを作成したいと思います:

.
├── d0
├── d1
└── d4

私がすでに試したこと:

で試しましたzip myfiles d0 f1/d1 f2/f3/d4。しかし、これは元のフォルダー構造を保持します。これは私が望んでいるものではありません。

.
├── d0
├── f1
│   └── d1
└── f2
    └── f3
        └── d4

質問 サブフォルダーなしで複数のファイルを含むzipを作成する方法は?

回答:


17

手動で、zipファイルを作成して更新できます。

zip myfiles d0
(cd f1; zip -u ../myfiles.zip d1)
(cd f2/f3; zip -u ../../myfiles.zip d4)

かっこはサブシェルを作成cdし、サブシェルでのみ効果が持続するcdため、元のディレクトリに戻る必要はありません。

場合はd1d2など実際のファイルではなくディレクトリ自体があり、その後、使用-jオプションを:

-j
--junk-paths
保存されたファイルの名前のみを保存し(パスをジャンク)、ディレクトリ名は保存しません。デフォルトでは、zipはフルパス(現在のディレクトリからの相対パス)を保存します。


19

を使用findしてファイルリストを取得し、実行zip -j myfilesしてパスを無視してパックすることができます。

find . -name "d[014]" -exec zip -j myfiles {} +

$ tree
.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

$ find . -name "d[014]" -exec zip -j myfiles {} +
  adding: d1 (stored 0%)
  adding: d4 (stored 0%)
  adding: d0 (stored 0%)

$ unzip -l myfiles.zip
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-09 10:47   d1
        0  2017-10-09 10:48   d4
        0  2017-10-09 10:47   d0
---------                     -------
        0                     3 files

ただし、これはファイルに対してのみ機能し、ディレクトリはによって無視されzip -jます。あまりにディレクトリのためにこの作業を取得するために、私たちはパックしたいとしd0d1全体f3上記の例では、ディレクトリは、findラインが少し複雑になります:

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} +
        zip warning: /home/dessert/myfiles.zip not found or empty
  adding: d1 (stored 0%)
  adding: f3/ (stored 0%)
  adding: f3/d3 (stored 0%)
  adding: f3/d2 (stored 0%)
  adding: f3/d4 (stored 0%)
  adding: d0 (stored 0%)
$ unzip -l myfiles.zip 
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-11 10:18   d1
        0  2017-10-11 10:19   f3/
        0  2017-10-11 10:19   f3/d3
        0  2017-10-11 10:19   f3/d2
        0  2017-10-11 10:19   f3/d4
        0  2017-10-11 10:17   d0
---------                     -------
        0                     6 files

18

-jオプションを使用すると、ファイルからパスが削除されます。

zip -j myfiles d0 f1/d1 f2/f3/d4 

参照


渡すパスのいずれかがファイルではなくディレクトリである場合、それらのディレクトリはオプションでzipファイルに追加されません-j
ダン

@dan-パスのないディレクトリ内のすべてのファイルが必要な場合zip -j myfiles directory/*
ravery
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.