我有以下文件目录方案:
.
|-- 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
从当前目录传递到目标目录(或本例中的父目录)