You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bash查找所有可执行文件并连同目录复制到指定测试文件夹

问题根因

之前的find命令出现.txt被误复制的问题,基本都是匹配条件写错导致的:要么是权限判断规则错误,把带读权限的普通文本纳入了匹配范围;要么是漏加文件类型过滤,匹配到目录后连带目录下的非可执行文件一起复制。

可直接复用的正确实现

优先用find + cpio的组合,对特殊文件名兼容性最好、复制效率最高,执行前先确保当前目录下没有重名的dummy文件夹,或者提前清空dummy目录避免旧文件干扰:

# 将<源目录1> <源目录2>替换成你要扫描的多个实际目录路径即可
find <源目录1> <源目录2> -type f -executable -print0 | cpio -pdm0 ./dummy/

参数说明:

  • -type f:仅匹配普通文件,排除目录、软链接、套接字等特殊文件类型
  • -executable:仅匹配当前运行命令的用户具备执行权限的文件,无执行权限的.txt、.md等普通文本文件会被直接过滤
  • -print0 配合cpio的-0参数:用null字符分隔文件名,完美兼容带空格、换行、特殊字符的文件名,避免复制出错
  • cpio参数:-p为透传复制模式,-d自动按需创建父目录保留原有结构,-m保留原文件的修改时间属性

如果是在macOS等默认不带GNU版本find的系统上,-executable参数不生效,可以替换为权限位匹配规则:

find <源目录1> <源目录2> -type f -perm +111 -print0 | cpio -pdm0 ./dummy/

其中-perm +111表示匹配属主、属组、其他用户任意一方拥有执行权限的文件,效果和GNU find的-executable基本一致。

如果习惯用cp命令保留目录结构的写法也可以,只是文件量较大时因为要反复调用cp进程,复制速度会慢一些:

find <源目录1> <源目录2> -type f -executable -exec cp --parents {} ./dummy/ \;
常见错误写法避坑

不要用类似下面的错误写法,这类写法就是导致.txt被误复制的核心原因:

错误示例:find . -type f -perm /u+r -exec cp --parents {} ./dummy/ \;
该规则匹配的是所有用户可读的文件,系统中绝大多数.txt默认都带读权限,自然会被全部复制。还有部分写法漏加-type f参数,会把目录本身匹配到结果中,触发cp命令复制整个目录下的所有内容,完全绕过可执行文件的过滤规则。

内容的提问来源于stack exchange,提问作者user3335796

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:36:25