Linux 多种方法 删除目录
1. 清理机器空间是(适用于大量删除)
rsync -av --delete /temp/null /repo
2.删除一个目录下部分类型之外的文件,采用逆向思维
有三种思路:
①. 使用 ls | grep -v “xxx” 进行筛选;
②. 开启反选 shopt -s extglob;
③. 通过 bash 中的GLOBIGNORE 变量删除文件(最后一种方法只适用于 bash,GLOBIGNORE 变量存储了一个路径名 展开 pathnameexpansion 功能的忽略模式(或文件名)列表,以冒号分隔)
④. find 结合 管道符
举例说明:
如下,我需要删除除了test.sh 之外的所有文件
2.1 执行 ls | grep -v “test.sh” | xargs rm -rf
[Linux]# ls
[Linux]# a.txt b.txt c.txt test1.txt test.txt
[Linux]# ls | grep -v "test.sh" | xargs rm -rf
[Linux]# ls
test.txt
2.2 开启 反选 shopt -s extglob(扩展:如果要保留多个,grep -v “X*”,或者在反选括号内 用 | 隔开。支持迷糊匹配等。)
[Linux]# shopt -s extglob
[Linux]# touch a.txt b.txt c.txt
[Linux]# ls
a.txt b.txt test.sh
[Linux]# rm -rf !(test.sh)
[Linux]# ls
test.sh
2.3 通过 bash 中的GLOBIGNORE 变量删除文件
为了使用这种方法,切换到 要删除文件的目录,像下面这样设置 GLOBIGNORE 变量:
[Linux]# cd test
[Linux]# GLOBIGNORE=*.odt:*.iso:*.txt
# 在这种情况下,除了 *.odt:*.iso:*.txt 之外的所有文件,都将从当前目录中 删除
[Linux]# rm -v *
# 关闭 GLOBIGNORE 变量
[Linux]# unsetGLOBIGNORE
[Linux]#
2.4 使用 Linux 下的 find 命令 删除文件
这种 方法,我们可以使用 find 命令 的适当选项 或者 采用 管道符 配合 xargs 命令,公式如下:
find /deirectory/ -type f -name 'PATHERN' -delete
find /deirectory/ -type f -name 'PATHERN' -print0 | xargs -0 -i {}rm {}
find /deirectory/ -type f -name 'PATHERN' -print0 | xargs -0 -i {}rm [options] {}
# 示例如下:
# 删除当前目录下的除了 .zip 之外的 所有的文件
find ./ -type f -not -name '*.zip' -delete
使用 管道 和 xargs,删除所有 的 HTML 文件:
find ./ -type f -name '*.html' -print0 | xargs -0 -i {} rm -rf {}
# 删除掉 当前目录下 的 除了 .gz 、 .odt 、.jpg 之外的所有文件
find ./ -type f -not \( -name '*.gz' or -name '*.odt' or -name '*.jpg' \) -delete