关于bash:Unix / Linux中特定文件的递归副本?

Recursive copy of specific files in Unix/Linux?

我需要从目录及其所有子目录复制所有*.jar文件。在Unix/Linux终端上如何操作?命令cp -r *.jar /destination_dir不起作用。


本地文件的复制以及机器之间的复制是有用的。这就是你想要的

法国电力公司

整个目录结构复制到/目的地 xDER,但只复制Jarfiles。文件上的所有权限和时间都是不可更改的。The-M will omit empty directories.Verbose输出。

如果一个干的运行添加一个N,它会告诉你该怎么做,但事实上并不是什么都复制。


如果你不需要目录结构,你可以使用:

1
2
shopt -s globstar
cp **/*.jar destination_dir

如果你需要的是目录结构,你可以检查cpS --parents选项。


如果你发现有一个Exec开关,并CP-T选项:

1
find . -name"*.jar" -exec cp -t /destination_dir {} +

如果你发现不提供"+"平行召唤,你可以使用;"但你可以加入EDOCX1[3]:

1
find . -name"*.jar" -exec cp {} /destination_dir";"


1
cp --parents `find -name \*.jar` destination/

From man cp

1
2
--parents
       use full source file name under DIRECTORY


1
tar -cf - `find . -name"*.jar" -print` | ( cd /destination_dir && tar xBf - )


如果你想在目的地保持同样的目录层次,你可以使用

1
2
(cd SOURCE && find . -type f -name \*.jar -exec tar cf - {} +) \
  | (cd DESTINATION && tar xf -)

这一方法,以扩展find的输出为基础,有一个优势,可以处理任何数量的文件。


ZZU1

假设您的Jar Filenames不包含空间,您的cp有选择权。如果cp不能

1
find . -name \*.jar | xargs -I FILE cp FILE /destination_dir