MacOS Bash中如何将archive下的文件夹上移一级并移除该层级
移除archive目录层级的MacOS Bash命令方案
原目录结构
. ├── Erie │ └── archive │ ├── 001 │ ├── 002 │ ├── 003 │ └── 004 │ ├── 0041 │ ├── 0042 │ └── 0043 └── SB └── archive ├── 002 ├── 003 └── 004
目标目录结构
. ├── Erie │ ├── 001 │ ├── 002 │ ├── 003 │ └── 004 │ ├── 0041 │ ├── 0042 │ └── 0043 └── SB ├── 002 ├── 003 └── 004
错误原因分析
- 方法1中
xargs mv .用法错误:xargs会将find输出的所有目录作为参数传给mv,导致最后一个目录被当作目标路径,出现错误嵌套。 - 方法2中
-exec的终止符问题:;需要用反斜杠转义为\;,否则Bash会将其识别为命令结束符,find无法找到终止标记。
正确命令
单个目录处理(以Erie为例)
- 进入Erie目录:
cd Erie
- 移动archive下的直接子目录到当前目录:
find ./archive -mindepth 1 -maxdepth 1 -type d -exec mv {} ./ \;
- 删除空的archive目录:
rmdir archive
批量处理Erie和SB目录
在包含Erie和SB的根目录执行:
for dir in Erie SB; do find "$dir/archive" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$dir/" \; rmdir "$dir/archive" done
命令说明
-mindepth 1 -maxdepth 1:限定只处理archive目录下的直接子目录,避免递归移动004内部的子目录(保留原有嵌套结构)。-exec mv {} ./ \;:将每个找到的目录移动到目标路径,\;必须转义,确保find能正确识别命令终止符。rmdir:仅当archive目录为空时才能删除,保证移动操作完成后清理空目录。
内容的提问来源于stack exchange,提问作者user22224133
相关产品推荐
相关产品推荐

