如何复制路径中带有花括号扩展的文件?

1 linux

我有一个同名(不同数据)的文件,它位于多个目录中。

一个例子:

/path/to/this/dir1/data.csv
/path/to/this/dir2/data.csv
/path/to/this/dir3/data.csv
/path/to/this/dir4/data.csv
Run Code Online (Sandbox Code Playgroud)

我想将这些文件(其各自的文件夹直接位于其上方)复制到新位置。

我试过这样的事情(dir1、dir2、dir3、dir4已经做好了):

cp -rf /path/to/this/{dir1,dir2,dir3,di4}/data.csv ./{dir1,dir2,dir3,dir4}/.
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,但我不确定如何正确地在一行中完成(这将是首选,但如果需要编写脚本并不是什么大问题)。

cho*_*oba 6

如果您cp支持该--parents选项,则可以使用

cd /path/to/this
cp --parents dir{1..4}/data.csv /path/to/target/
Run Code Online (Sandbox Code Playgroud)

for循环也应努力:

for data in /path/to/this/dir{1..4}/data.csv ; do
    cp $data ${data#path/to/this/}
done
Run Code Online (Sandbox Code Playgroud)

或者,使用find(没有大括号扩展 ivolved):

cd /path/to/this
find -path './dir[1234]' -exec cp {}/data.csv /path/to/target/{} \;
Run Code Online (Sandbox Code Playgroud)