如何查找子目录中的文件并将其复制到找到该文件的位置之前的文件夹中

如何查找子目录中的文件并将其复制到找到该文件的位置之前的文件夹中

我有以下文件目录方案:

.
|-- 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从当前目录传递到目标目录(或本例中的父目录)

相关内容