如何删除某个路径的一个目录?

如何删除某个路径的一个目录?

假设我有一条路

Leonardo/data/approach/tennis/video

并且我想删除approach目录,这意味着路径应该是这样的:

Leonardo/data/tennis/video

我可以用一些命令从终端执行此操作吗?

无需复制tennisdata然后手动删除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

相关内容