出力ファイルだけでなく、フォルダ全体の内容をコピーする

出力ファイルだけでなく、フォルダ全体の内容をコピーする

少なくとも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が存在しますが空です。

おすすめ記事