假设我有一条路
Leonardo/data/approach/tennis/video
并且我想删除approach
目录,这意味着路径应该是这样的:
Leonardo/data/tennis/video
我可以用一些命令从终端执行此操作吗?
无需复制tennis
到data
然后手动删除approach
?
答案1
您可以使用此函数;它将把作为参数传递的目录内的所有内容移动到上一级,从而处理目标目录中的多个文件/文件夹:
function delete_dir() {
[ -d "$1" ] || return;
for x in "$1"/*; do
mv -i "$x" "$1"/..
done
rmdir "$1"
}
将其添加到末尾~/.bashrc
并. ~/.bashrc
在正在运行的 Bash 实例(如果有)中运行以立即应用更改。
$ tree
.
└── foo
└── bar
├── 1
├── 2
└── 3
2 directories, 3 files
$ delete_dir foo/bar
$ tree
.
└── foo
├── 1
├── 2
└── 3
1 directory, 3 files
答案2
简单来说:
mv Leonardo/data/approach/tennis Leonardo/data && rmdir Leonardo/data/approach
为什么rmdir
?为了在子目录仍然存在时不删除该目录。
例子
$ mkdir -p Leonardo/data/approach/tennis/video
$ tree
.
`-- Leonardo
`-- data
`-- approach
`-- tennis
`-- video
5 directories, 0 files
$ mv Leonardo/data/approach/tennis Leonardo/data && rmdir Leonardo/data/approach
$ tree
.
`-- Leonardo
`-- data
`-- tennis
`-- video
4 directories, 0 files