サブディレクトリでファイルを見つけ、ファイルが見つかった場所より前のフォルダにコピーする方法

サブディレクトリでファイルを見つけ、ファイルが見つかった場所より前のフォルダにコピーする方法

次のファイルディレクトリスキームがあります。

.
|-- FOO1
|   `-- p58
|       `-- file1.csv
|-- FOO2
|   `-- p63
|       `-- file2.csv

各CSVファイルはFOOまたはBARのサブディレクトリにあります。私がしたいのは、それを古いディレクトリにコピーすることです。結果は次のとおりです。

.
|-- FOO1
|   `-- file1.csv
|   `-- p58
|       `-- file1.csv
|-- FOO2
|   `-- file2.csv
|   `-- p63
|       `-- file2.csv

私はこれを試しましたが失敗しました。

find . -type f -name "*.csv" | grep FOO | xargs -I {} cp {} ..;

正しいアプローチは何ですか?

ベストアンサー1

GNU findを使用すると、次のオプションを使用できます-execdir

find . -type f -name "*.csv" -execdir cp --target-directory=.. {} +

からman find

-execdirコマンド;

-execdir コマンド{} +

-execに似ていますが、指定されたコマンドは通常、検索を開始したディレクトリではなく、一致するファイルを含むサブディレクトリで実行されます。

だから私は、cp --target-directory=..findコマンドがp58ディレクトリにある場合は、..親ディレクトリの下にファイルを配置するを使用しますFOO1

私はこれを使用して、現在のディレクトリから{} +一致するすべてのファイルをターゲットディレクトリ(またはこの場合は親ディレクトリ)に渡すことができます。*.csv

おすすめ記事