少なくとも1つの「wav」ファイルを含むディレクトリを使用しfind
てコピーしたいです。rsync
「wav」ファイルがある場合、コピーはフォルダ全体をコピーする必要があります。これまで私はこれを持っています:
find . -name "*.wav" | rsync -armR --include="*/" --include="*.wav" --exclude="*" /users/lukew/desktop/merged /users/lukew/desktop/123;
出力は単一の「wav」ファイルとして出力レベルの正しいディレクトリに配布されるため、問題ありません。また、ソースディレクトリ内の他のファイルを出力ディレクトリの「wav」ファイルに含めたいと思います。
答え1
どのディレクトリにファイルが含まれているかを把握する必要があります.wav
。
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-print
これはすべてのディレクトリを繰り返し、すべてのディレクトリで.
globパターンを試みます。*.wav
パターンが拡張されていない場合はそこにファイルがないとします(.wav
ディレクトリにリテラル名を持つファイルが存在し、同じディレクトリに別のファイルがない場合は失敗します)。*.wav
.wav
rsync
その後、上記のコマンドをマージしてこれらのディレクトリを同期できます。
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-exec rsync -a {} /path/to/destination/ ';'
/path/to/destination
これにより、ファイルが含まれていることが判明した各ディレクトリのサブディレクトリが作成されます.wav
。
テスト:
$ tree Source
Source
|-- A
| |-- a.wav
| |-- hs.doc
| `-- hy.xls
|-- B
| |-- hs.doc
| `-- py.xls
`-- C
|-- CA
| |-- d.wav
| |-- h.doc
| `-- h.xls
`-- CB
|-- h.doc
`-- hd.xls
5 directories, 10 files
実行コマンド:
$ find Source -type d -exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' -exec rsync -a {} Dest/ ';'
検査結果:
$ tree Dest
Dest
|-- A
| |-- a.wav
| |-- hs.doc
| `-- hy.xls
`-- CA
|-- d.wav
|-- h.doc
`-- h.xls
2 directories, 6 files
ディレクトリDest
が存在しますが空です。