bash - 从所有子目录中复制具有特定扩展名的所有文件

标签 bash unix cp

在unix下,我想把所有子目录下所有具有一定扩展名的文件(都是excel文件)复制到另一个目录下。我有以下命令:

cp --parents `find -name \*.xls*` /target_directory/

这个命令的问题是:

  • 它也复制了目录结构,我只想要文件(所以所有文件都应该在/target_directory/中结束)

  • 它不会复制文件名中有空格的文件(很多)

这些问题有什么解决方案吗?

最佳答案

--parents 正在复制目录结构,所以你应该去掉它。

按照您编写此代码的方式,find 将执行,并将输出放在命令行上,这样 cp 就无法区分分隔文件名,以及文件名中的空格。最好做类似的事情

$ find . -name \*.xls -exec cp {} newDir \;

其中 cpfind 找到的每个文件名执行,并正确传递文件名。 Here's more info关于这项技术。

您可以使用 zsh 而不是以上所有内容并简单地输入

$ cp **/*.xls target_directory

zsh 可以扩展通配符以包含子目录,并使这类事情变得非常容易。

关于bash - 从所有子目录中复制具有特定扩展名的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617016/

相关文章:

linux - 庆典 : inexplicable behavior sed

linux - 在 shell 脚本中使用 passwd 命令

unix - 如何从 0 分钟以外的时间开始每 5 分钟运行一次 cron 作业?

linux - 在不同目录中压缩文件时遇到问题

python - cp: cannot stat ‘/mnt/ask78b30/TEST_FILE’ : 远程 I/O 错误

linux - "mkdir || echo && exit"即使 mkdir 成功退出

linux - 如何让bash shell输出带有颜色的字体?

linux - 在 bash 脚本的 until 循环中验证多个表达式

shell - 删除 CR 行终止符

linux - cp 的所有可能的退出代码