Unix/Linux下复制含指定字符串文件名的文件报错求助
解决Unix/Linux下复制含特定字符串文件名的文件问题
嘿,我来帮你搞定这个文件复制的难题!你之前尝试的命令格式不对,所以才会出现cp无法识别参数的错误——cp本身没有内置的文件名过滤功能,得通过和其他工具配合或者用shell通配符来实现需求。
先说说你之前命令的问题
- 第一个命令里,你把
find直接作为cp的参数,cp会把find当成一个要复制的文件名,自然无法识别; - 第二个命令里的
-e'file_00'是无效的,cp根本没有-e这个用来过滤文件名的参数,所以也会报错。
正确的实现方法
方法1:用find + xargs(高效处理大量文件)
这是最常用的组合,适合需要遍历子目录找文件的场景:
find /home/folder_1 -name "*file_00*" -type f | xargs cp -a -t /home/folder_2
-type f:确保只找普通文件,避免误复制同名目录;xargs:把find输出的文件列表传递给cp;-t /home/folder_2:指定cp的目标目录,让命令格式更清晰。
方法2:用find的-exec选项(处理含空格的文件名更安全)
如果你的文件名里包含空格或者特殊字符,用这个方法更稳妥:
find /home/folder_1 -name "*file_00*" -type f -exec cp -a {} /home/folder_2 \;
{}:代表find找到的每一个文件;\;:用来标记-exec命令的结束。
方法3:用bash通配符(简单场景快速解决)
如果要复制的文件都在/home/folder_1目录下,没有嵌套的子目录,直接用通配符就能搞定:
cp -a /home/folder_1/*file_00* /home/folder_2
这个命令会直接匹配folder_1下所有文件名包含file_00的文件,复制到folder_2。
内容的提问来源于stack exchange,提问作者Y.Coch




