フォルダ全体に* .csvファイルが散在するフォルダ構造があります。これで、フォルダ構造を維持しながら、すべての* .csvファイルを別のターゲットにコピーしたいと思います。
仕組みは次のとおりです。
cp --parents *.csv /target
cp --parents */*.csv" /target
cp --parents */*/*.csv /target
cp --parents */*/*/*.csv /target
...
など。しかし、コマンドを使用したいと思います。
答え1
find
非常に便利なオプションがあります-exec
。
find . -name '*.csv' -exec cp --parents \{\} /target \;
答え2
rsync
この目的にも使用できます。
$ rsync -a --prune-empty-dirs --include '*/' --include '*.csv' --exclude '*' source/ target/
ソースツリーで空のディレクトリを維持するには、この--prune-empty-dirs
オプションをスキップしてください。
$ rsync -a --include '*/' --include '*.csv' --exclude '*' source/ target/
そうすればいいえシンボリックリンク、変更日、ファイル権限、所有者などを保持するには;-)-a
に置き換えます。-rlptgoD
答え3
答え4
これは私にとって効果的です。
find -name "*.csv" | xargs cp --parents -t /target
ファイル名にスペースが含まれている場合は、オプションを追加し、説明のいずれかで提案されている-print0
とおり-0
に実行します。
find -name "*.csv" -print0 | xargs -0 cp --parents -t /target