findを使用してファイルをコピーするときに最終的なディレクトリ構造を維持する方法

findを使用してファイルをコピーするときに最終的なディレクトリ構造を維持する方法

"parents"コマンドを使用すると機能しますが、ディレクトリ全体の構造がコピーされるため、最後のディレクトリのみを保持できます。

find /tmp/data/ -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;

私が得た結果は次のとおりです。

/u01/ABC/tmp/data/a/1.txt
/u01/ABC/tmp/data/b/1.txt
/u01/ABC/tmp/data/c/1.txt

必要な出力は次のとおりです。

/u01/ABC/a/1.txt
/u01/ABC/b/1.txt
/u01/ABC/c/1.txt

ベストアンサー1

sh -cコマンドで使用すると、より多くの制御権が得られますfind -exec。たとえば、次のようにできます。

find ... -exec sh -c '
    target="/u01/ABC/$(basename "$(dirname "$1")")"
    mkdir -p "$target" && cp --backup "$1" "$target"
' find-sh {} \;

おすすめ記事