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

如何将文件夹全部内容移动到其内部子文件夹且排除目标子目录

可以排除,以下是具体原因说明和实现方案:

报错原因

你执行的命令中xyz/*会匹配xyz目录下的所有一级文件和文件夹,也包括目标目录xyz/archive本身,因此mv操作会尝试将archive目录移动到其自身的子目录中,触发系统的非法操作报错。

通配符排除archive的实现方法

方法1:使用Bash扩展通配符(最便捷)

Bash支持扩展通配符规则,可直接实现排除匹配:

  • 先执行shopt -s extglob开启扩展通配符功能(绝大多数Linux发行版、MacOS默认已开启该配置,可省略这一步)
  • 执行移动命令:
    mv xyz/!(archive) xyz/archive/
    其中!(archive)就是通配符的排除语法,代表匹配除了名为archive的内容之外的所有一级文件/文件夹。

注意:默认通配符*不会匹配以.开头的隐藏文件,如果需要同时移动隐藏文件,可将命令调整为mv xyz/!(archive) xyz/.(!) xyz/archive/。

方法2:使用find命令(兼容性更强)

如果你的shell环境不支持扩展通配符,可使用find命令完成筛选移动,不需要依赖特定shell规则:
find xyz -maxdepth 1 -not -name archive -not -path xyz -exec mv {} xyz/archive/ \;
参数说明:

  • -maxdepth 1 限定只检索xyz目录的一级内容,不遍历深层子目录
  • -not -name archive 排除名为archive的目标目录
  • -not -path xyz 排除xyz目录本身,避免被匹配到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:57:00