複数のサブフォルダ内のすべてのファイルを圧縮する方法は?

複数のサブフォルダ内のすべてのファイルを圧縮する方法は?

オリジナル入力:

    ➜  test tree
    .
    ├── f1.md
    ├── f2.md
    ├── f3.md
    ├── f4.txt
    ├── f5.csv
    ├── f6.doc
    ├── s1
    │   ├── code
    │   └── data
    │       ├── f1.md
    │       ├── f2.md
    │       ├── f3.md
    │       ├── f4.txt
    │       ├── f5.csv
    │       └── f6.doc
    ├── s2
    │   ├── code
    │   └── data
    │       ├── f1.md
    │       ├── f2.md
    │       ├── f3.md
    │       ├── f4.txt
    │       ├── f5.csv
    │       └── f6.doc
    ├── s3
    │   ├── code
    │   └── data
    │       ├── f1.md
    │       ├── f2.md
    │       ├── f3.md
    │       ├── f4.txt
    │       ├── f5.csv
    │       └── f6.doc
    └── s4
        ├── code
        └── data
            ├── f1.md
            ├── f2.md
            ├── f3.md
            ├── f4.txt
            ├── f5.csv
            └── f6.doc

    12 directories, 30 files

期待される出力

➜  test tree
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
│   ├── code
│   └── data
│       ├── Archive.zip
│       ├── f1.md
│       ├── f2.md
│       ├── f3.md
│       ├── f4.txt
│       ├── f5.csv
│       └── f6.doc
├── s2
│   ├── code
│   └── data
│       ├── Archive.zip
│       ├── f1.md
│       ├── f2.md
│       ├── f3.md
│       ├── f4.txt
│       ├── f5.csv
│       └── f6.doc
├── s3
│   ├── code
│   └── data
│       ├── f1.md
│       ├── f2.md
│       ├── f3.md
│       ├── f4.txt
│       ├── f5.csv
│       └── f6.doc
└── s4
    ├── code
    └── data
        ├── Archive.zip
        ├── f1.md
        ├── f2.md
        ├── f3.md
        ├── f4.txt
        ├── f5.csv
        └── f6.doc

12 directories, 33 files

サブフォルダ(s1/s2/s4)のファイルを圧縮したいです。

zip -r Archive.zip ./*各サブフォルダ(s1/s2/s4)でコマンドラインを試してみました。同じ命令を3回入力しなければならないので不便ですね。

ワンタイムコマンドを使用するか、スクリプトを作成してこれを達成するにはどうすればよいですか?私はOSX(10.12.6)を使用しています。

ベストアンサー1

find . -type d -name data -execdir zip -jr data/Archive.zip data ';'

このコマンドは、現在のディレクトリの下の各ディレクトリをfind検索して実行します。data

zip -jr data/Archive.zip data

sNディレクトリ(ディレクトリの親ディレクトリdata)にあります。隠しファイルも保持されます。

フラグは-jアーカイブzipに追加されたファイルのパス名を削除し、アーカイブはdataディレクトリ内に配置されます。

-execdirこれは、デフォルトでcdは、コマンドを実行する前に見つかったエントリの親ディレクトリでタスクが実行されるために機能します。

s3このディレクトリを避けるには、次のようにします。

find . -type d -name data \! -path "./s3/*" -execdir zip -jr data/Archive.zip data ';'

おすすめ記事