news 2026/10/8 7:03:09

将一个文件复制到所有匹配的目录中的命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
将一个文件复制到所有匹配的目录中的命令

find -name "sw*pll*"|xargs cp dump.lst有几个问题,不能正确实现“将dump.lst复制到所有匹配sw*pll*的目录中”。

问题分析

  1. find缺少搜索路径
    find的基本语法是find [路径] [表达式],直接写find -name ...在 GNU find 中会报错(paths must precede expression)。应指定路径,如.表示当前目录。

  2. 未限定只匹配目录
    -name "sw*pll*"会同时匹配文件和目录。如果匹配到文件,cp dump.lst 文件会覆盖该文件,而不是复制到目录中。应加上-type d确保只匹配目录。

  3. xargs cp dump.lst参数传递错误
    xargs会把找到的所有路径一次性附加到cp dump.lst后面,变成类似:

    cp dump.lst dir1 dir2 dir3

    但cp只允许一个源文件和一个目标(或多个源文件和一个目标目录)。这里只有一个源dump.lst,却有多个目标,cp会报错(target 'dir2' is not a directory等)。必须对每个目录单独执行一次cp。

  4. 未处理文件名中的空格等特殊字符
    如果目录名包含空格,xargs默认按空白分割会导致错误。应使用-print0和xargs -0,或直接用find -exec。

正确写法

使用find的-exec选项,对每个匹配的目录单独执行一次复制:

find . -type d -name "sw*pll*" -exec cp dump.lst {} \;
  • .:从当前目录开始搜索。

  • -type d:只查找目录。

  • -name "sw*pll*":名称匹配模式。

  • -exec cp dump.lst {} \;:对每个找到的目录{}执行cp dump.lst <目录>,\;表示命令结束。

其他可选方案

如果目录名可能包含空格,上述-exec方式已经能安全处理。若想用xargs,可以这样:

find . -type d -name "sw*pll*" -print0 | xargs -0 -I {} cp dump.lst {}

或者使用cp -t(但需要循环,不如-exec简洁)。

注意事项

  • 如果目标目录中已存在dump.lst,会被直接覆盖。若想避免覆盖,可加-i(交互)或-n(不覆盖)选项,例如cp -n dump.lst {}。

  • 确保dump.lst文件存在且路径正确。

总结:原命令不正确,推荐使用:

find . -type d -name "sw*pll*" -exec cp dump.lst {} \;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 7:03:07

Windows C 盘清理指南:安全删除临时文件、缓存与 Prefetch

Windows C 盘清理指南&#xff1a;安全删除临时文件、缓存与 Prefetch C 盘爆红、系统盘空间不足时&#xff0c;可以通过清理临时文件、系统缓存和 Prefetch 来释放空间。 注意&#xff1a;本文操作建议在“管理员身份运行”的命令提示符或账户下进行。清理前请关闭浏览器、Off…

作者头像 李华
网站建设 2026/10/8 7:01:18

工业级电源路径保护:TPS259483与PIC18F87K22协同设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华