帮助中心 >
  关于独立服务器 >
  删除目录中非指定扩展名文件的方法
删除目录中非指定扩展名文件的方法
时间 : 2024-12-12 14:17:35
编辑 : Jtti

Linux系统中如需删除目录中指定类型文件之外的全部文件,以此清理目录有哪些便捷的方法呢?下文即将为大家分享。

Linux中shell模式是一个由以下特殊字符组成的字符串,这些字符也称通配符或元字符:

*– 匹配零个或多个字符

?– 匹配任意单个字符

[seq]– 匹配 seq 中的任何字符

[!seq]– 匹配不在序列中的任何字符

通过扩展模式匹配运算符删除文件,下面是不同的扩展模式匹配运算符,其中模式列表是包含一个或多个文件名的列表,使用字符分隔|:

*(pattern-list)– 匹配零次或多次指定模式

?(pattern-list)– 匹配零次或一次指定的模式

+(模式列表) – 匹配指定模式的一个或多个实例

@(pattern-list)– 与指定模式之一匹配

!(pattern-list)– 匹配除给定模式之外的任何内容

先启用extglob shell 选项:

# shopt -s extglob

如需要删除除了filename之外的全部文件:

$ rm -v !("filename")

删除filename1和filename2之外的全部文件:

$ rm -v !("filename1"|"filename2")

下面的例子展示了如何以交互方式删除除所有.zip文件以外的所有文件:

$ rm -i !(*.zip)

可以删除.zip和.odt文件之外的全部文件:

$ rm -v !(*.zip|*.odt)

完成后可以关闭extglob shell 选项,如下所示:

$ shopt -u extglob

使用Linux find命令删除文件,或者与xargs命令结合使用管道:

$ find /directory/ -type f -not -name 'PATTERN' -delete

$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}

$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}

删除以.gz之外的全部文件:

$ find . -type f -not -name '*.gz'-delete

使用管道和xargs,你可以修改上面的情况如下:

$ find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}

下面的命令将清除当前目录中除.gz、.odt和文件之外的所有文件:.jpg:

$ find . -type f -not \(-name '*gz' -或 -name '*odt' -或 -name '*.jpg' \) -delete

但是最后一种方法只适用于 bash。使用 Bash GLOBIGNORE 变量删除文件,GLOBIGNORE变量存储了由冒号分隔的模式列表(文件名),将被路径名扩展忽略。使用此方法,请进入您想要清理的目录,然后按如下方式设置GLOBIGNORE变量:

$ cd test

$ GLOBIGNORE=*.odt:*.iso:*.txt

在这种情况下,除 、 和 之外的所有文件都.odt将从.iso当前.txt目录中删除。

现在运行命令来清理目录:

$ rm -v *

之后,关闭GLOBIGNORE变量:

$ unset GLOBIGNORE

删除文件是一项需要极度谨慎的操作。在执行删除之前,务必清晰理解删除文件的动机——是为了移除某些特定类型的过时文件,还是仅仅为了释放磁盘空间。本文旨在提供一种方法,帮助您在需要清空目录中的所有文件时,能够保留那些以特定扩展名结尾的重要文件。

JTTI-Defl
JTTI-COCO
JTTI-Selina
JTTI-Ellis
JTTI-Eom