
オリジナル入力:
➜ datatest tree
.
├── a
│ ├── README.md
│ ├── code
│ └── data
│ └── apple.csv
├── archive.sh
├── f
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ ├── a.csv
│ ├── b.xlsx
│ └── c.xlsx
└── toolbox
└── tool.py
7 directories, 9 files
出力:
➜ datatest tree
.
├── a
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ └── apple.csv
├── archive.sh
├── f
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ ├── a.csv
│ ├── b.xlsx
│ └── c.xlsx
└── toolbox
└── tool.py
7 directories, 10 files
各 /data サブフォルダーにファイルがArchive.zip
既に存在しない限りArchive.zip
(f
フォルダーに) 圧縮する必要があります。
努力する:
そこにないサブフォルダがあることを確認するには、コマンドラインを使用する必要がありますがArchive.zip
、それは不便です。/data
tree
zip -r Archive.zip ./*
希望:
ワンタイムコマンドを使用するか、スクリプトを作成してこれを達成するにはどうすればよいですか?私はOSX(10.12.6)を使用しています。
答え1
たぶんこんなことはありませんか?
find . -type d -name data \
\! -exec test -f {}/Archive.zip ';' \
-execdir zip -rj data/Archive.zip data ';'
これにより、すべてのdata
ディレクトリ(最初の行)が検索されます。
名前付きファイルが含まれていないディレクトリ\! -exec test -f {}/Archive.zip ';'
はすべてフィルタリングされます。data
Archive.zip
この行はで置き換えることができます\! -execdir test -f data/Archive.zip ';'
。
最後に、ディレクトリの親ディレクトリから指定され-execdir
たコマンドを実行します。これにより、インクルードファイルが作成されます(アーカイブファイル名にパスは追加されません)。zip
data
data/Archive.zip
data
これは次のようになります。前の質問に対する私の答え、data/Archive.zip
挿入するかどうかをテストします。