如何将所有文件(不包括文件夹)递归复制到一个目标文件夹中?

如何将所有文件(不包括文件夹)递归复制到一个目标文件夹中?

我有几个文件夹,/music/1/a.mp3例如/music/2/b.mp3

保证所有文件名本身都是不同的。

有没有办法,比如使用终端,将这些文件复制到/musicTemp/排除文件夹中?

换句话说,上面两个例子的结果应该是:

/music/1/a.mp3
/music/2/b.mp3

进入:

/musicTemp/a.mp3
/musicTemp/b.mp3

答案1

find命令将查找指定模式 (-name) 的所有文件,在本例中为特定文件类型:*.mp3-exec使 find 的所有后续参数都作为命令的参数,直到;遇到由 组成的参数(最后,使用文字转义以防止 shell 扩展)。在本例中,我们希望执行的命令是文件复制 ( cp),复制与模式 ( ) 匹配的文件{}并将这些文件复制到/destination_dir。此命令应该可以解决问题:

find /music -name "*.mp3" -type file -exec cp {} /destination_dir \;

答案2

如果你有安装了 Bash 4,你可以添加shopt -s globstar到 .bash_profile 并运行:

cp /music/**/*.mp3 /musicTemp/

相关内容