You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动