在unix下,我想将所有具有特定扩展名的文件(所有excel文件)从所有子目录复制到另一个目录.我有以下命令:
cp --parents `find -name \*.xls*` /target_directory/
Run Code Online (Sandbox Code Playgroud)
这个命令的问题是:
它也复制了目录结构,我只想要文件(所以所有文件都应该在/ target_directory /中)
它不会复制文件名中包含空格的文件(这些文件很多)
针对这些问题的解决方案?
Bri*_*new 150
--parents 正在复制目录结构,所以你应该摆脱它.
你写的这个问题的方法,在find执行时,其输出被放到命令行,从而cp不能空格分开的文件名和空间区分内的文件名.做一些像这样的事情会更好
$ find . -name \*.xls -exec cp {} newDir \;
Run Code Online (Sandbox Code Playgroud)
其中cp为find找到的每个文件名执行,并正确传递文件名.这里有关于这种技术的更多信息.
而不是以上所有,您可以使用zsh并简单地键入
$ cp **/*.xls target_directory
Run Code Online (Sandbox Code Playgroud)
zsh 可以扩展通配符以包含子目录,并使这类事情变得非常容易.
guy*_*uya 28
综上所述,我想出了这个版本.这个版本也适用于mac恢复终端.
find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';'
Run Code Online (Sandbox Code Playgroud)
它将在当前目录中以递归方式查找具有xsl扩展名的文件的所有子目录.它会将它们全部复制到目标目录.
cp标志是:
小智 8
我遇到了类似的问题.我解决了它:
find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";"
Run Code Online (Sandbox Code Playgroud)
该'{}'和";"执行上的每个文件的副本.
小智 7
到 2022 年,zsh 解决方案也可以在 Linux Bash 中运行:
cp **/*.extension /dest/dir
Run Code Online (Sandbox Code Playgroud)
按预期工作。
小智 6
我也必须自己做这件事。我通过 cp 的 --parents 参数做到了:
find SOURCEPATH -name filename*.txt -exec cp --parents {} DESTPATH \;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152191 次 |
| 最近记录: |