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

关于将当前目录全部内容移动至父目录的命令简化写法疑问

关于将当前目录全部内容移动至父目录的命令简化写法疑问

嘿,这个问题问得很实在!咱们来唠唠你提到的这两个命令,看看你的简化思路对不对~

首先拆解一下原命令 mv /path/subfolder/{.,}* /path/:这里的 {.,}* 是Shell的括号扩展语法,展开后会变成 .* 和 * —— .* 用来匹配所有隐藏文件/文件夹,* 匹配普通的非隐藏项。不过要提一句,.* 其实会包含当前目录 . 和父目录 ..,但mv 会自动忽略这两个特殊目录,毕竟你没法把它们移走,所以实际执行不会出问题。

再看你写的 mv ~/{.,}* ../,这里有个关键小错误:~ 代表的是你的家目录,不是你当前所在的目录!如果你当前不在家目录里执行这个命令,它会把你家目录下的所有文件(包括隐藏的)一股脑移到父目录,这肯定不是你想要的效果。

如果把路径改成当前目录的写法 mv ./{.,}* ../,那这个命令是可以正常工作的——它和原命令逻辑完全一致,就是把当前目录下的所有普通项和隐藏项都移到父目录。不过有个小细节要注意:如果当前目录里没有非隐藏文件,有些Shell(比如默认的bash)不会展开 *,这时候mv会尝试移动名为*的文件,自然会报错。要是想避免这个问题,你可以先开启nullglob选项(执行shopt -s nullglob),这样当没有匹配项时,*会直接消失,就不会报错了。

另外,还有个更直白的写法 mv * .* ../,不过同样会遇到上面说的*不展开的问题,而{.,}*的括号扩展写法相对更稳妥一些。

总结一下:如果你想移动当前目录的所有内容到父目录,正确的简化写法应该是 mv ./{.,}* ../,别用~哦~

备注:内容来源于stack exchange,提问作者Karl Heisler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:42:46