有时,您可能会发现自己处于需要的情况或只需清除目录,除了具有特定扩展名的文件(例如,以特定类型结尾)以外的所有文件。
在本文中,我们将向您展示如何在目录中删除文件,不包括,使用,,,,, 和Globignore命令。
在进一步移动之前,让我们首先简要查看Linux中的一个重要概念 - 文件名模式匹配,这将使我们能够处理手头的问题。
在Linux中,外壳模式是由以下特殊字符组成的字符串,称为通配符或者metacharacters:
*
- 匹配零或更多字符?
- 匹配任何单个角色[seq]
- 匹配任何角色seq
[!seq]
- 匹配任何不在中的角色seq
我们将在这里探索三种可能的方法,其中包括:
使用扩展模式匹配操作员删除文件
下面列出了扩展模式匹配操作员。在这种情况下,模式列表是指一个或多个文件名,使用|
特点:
*(pattern-list)
- 匹配指定模式的零或更多事件?(pattern-list)
- 匹配指定模式的零或一次出现- +(模式列表)- 匹配指定模式的一个或多个出现
@(pattern-list)
- 匹配指定模式之一!(pattern-list)
- 匹配除给定模式之一以外的任何东西
要使用它们,启用extglob
外壳选项如下:
shopt -s extglob
1。要在目录中删除除特定文件以外的目录中的所有文件,请键入以下命令:
rm -v !("filename")

2。删除所有文件,但filename1
和filename2
:
rm -v !("filename1"|"filename2")

3。删除除了.zip
文件,互动:
rm -i !(*.zip)

4。删除除了.zip
和.odt
显示要执行的操作时的文件:
rm -v !(*.zip|*.odt)

一旦拥有所有必需的命令,请关闭extglob
外壳选项类似:
shopt -u extglob
使用Linux查找命令删除文件
在这种方法下,我们可以具有适当的选项或与通过采用以下表格中的管道:
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] {}
5。以下命令将删除除了.gz
当前目录中的文件:
find . -type f -not -name '*.gz'-delete

6。使用管道和Xargs,您可以按以下方式修改以下情况:
find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

7。让我们查看另一个示例,以下命令将擦除所有不包括的文件.gz
,,,,.odt
, 和.jpg
当前目录中的文件:
find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

使用bash globignore变量删除文件
但是,这种最后的方法只能与bash一起使用。在这里,Globignore变量存储一个结肠分离的模式列表(文件名),可被路径名扩展忽略。
要采用这种方法,请进入您要清理的目录,然后设置Globignore可变如下:
cd test GLOBIGNORE=*.odt:*.iso:*.txt
在这种情况下,除了所有文件.odt
,,,,.iso
, 和.txt
从当前目录中删除的文件。
现在运行命令清理目录:
rm -v *
之后,关闭Globignore多变的:
$ unset GLOBIGNORE

笔记:要了解上面命令中使用的标志的含义,请参阅我们在各种插图中使用的每个命令的人页面。
结论
这些是在Linux中删除文件的几种简单有效的方法,仅保留具有特定扩展名或文件名完整的文件。如果您知道清理目录的其他有用的命令行技术,请随时在下面的“反馈”部分中分享它们。