次のファイルディレクトリスキームがあります。
.
|-- 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