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

如何在bash环境下使用cp、rm命令同时操作多个指定文件夹?

你之前使用的cp -r $(ls -A | grep "Z*") destination命令失效有两个核心原因:

  1. grep "Z*"的匹配规则是0个或多个Z开头的字符串,等价于匹配所有内容,会把当前目录下所有文件/文件夹都纳入操作范围,数据量大时就会卡住无响应
  2. 不要解析ls的输出做文件操作,遇到文件名/文件夹名带空格、换行、特殊字符时,会被shell错误拆分,直接导致No such file or directory报错

一、批量删除指定文件夹

提示:如果你的系统是非GNU发行版(比如BSD/macOS),find的-delete参数无法删除非空文件夹,替换为-exec rm -r {} +即可。

  • 场景1:删除当前目录下所有以Z开头的文件夹
    最稳妥的find原生写法:
    find . -maxdepth 1 -type d -name "Z*" -delete
    
    参数说明:-maxdepth 1限定只搜索当前目录不递归子目录,-type d只匹配文件夹,-name "Z*"匹配名称以Z开头的对象,-delete直接删除匹配结果。
  • 场景2:删除指定目录/opt/source下的固定名称文件夹(比如要删除dir1、dir2、dir3三个文件夹)
    find /opt/source -maxdepth 1 -type d \( -name "dir1" -o -name "dir2" -o -name "dir3" \) -delete
    

二、批量复制指定文件夹

  • 场景1:复制当前目录下所有以Z开头的文件夹到/opt/destination目录
    方法1(兼容性最好,支持带特殊字符的文件夹名):
    find . -maxdepth 1 -type d -name "Z*" -exec cp -r {} /opt/destination \;
    
    方法2(bash原生写法,路径无特殊字符时更简洁):
    先执行shopt -s extglob(可写入~/.bashrc永久生效),再运行:
    cp -r Z*/ /opt/destination
    
    参数说明:Z*/末尾的斜杠强制只匹配以Z开头的文件夹,不会匹配普通文件。
  • 场景2:复制指定目录/opt/source下的多个固定名称文件夹(比如dir1、dir2、dir3)到目标目录
    cp -r /opt/source/{dir1,dir2,dir3} /opt/destination
    
    大括号扩展写法适合已知要操作的文件夹名称的场景,无需调用额外命令。

管道传参的正确写法

cp、rm默认不读取管道输入的参数,需要搭配xargs的-0参数配合find的-print0使用,完全规避特殊字符导致的路径拆分错误,以删除场景为例:

find . -maxdepth 1 -type d -name "Z*" -print0 | xargs -0 rm -r

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:04