使用“查找”删除具有下划线/字母模式的文件

使用“查找”删除具有下划线/字母模式的文件

有没有办法找到并删除具有这样的模式的文件(其中模式只是文件名中有两个下划线,由字母或数字分隔)

前任。/file_name_name

我尝试使用find . -name '*_*_' -delete来查找这些文件,但没有成功。也许是因为文件是目录的符号链接?

答案1

您的文件名通配模式是几乎正确检测至少有两个下划线的名称,但您强制名称末尾有一个下划线。

*如果你只是在模式的末尾添加一个结尾,你应该没问题:

$ find . -name '*_*_*'
./file__name
./a_file_name
./more_file_name_here

明确地不是匹配具有两个以上下划线的名称:

$ find . -name '*_*_*' ! -name '*_*_*_*'
./file__name
./a_file_name

这里的第二部分,-name '*_*_*_*',将匹配任何具有三个或更多下划线的名称,而前面的部分!将否定匹配的意义。

请注意,find不带的表达式-type将匹配以下名称任何文件类型,即它可以匹配目录、命名管道、套接字、设备文件等的名称。

另外仅匹配常规文件add -type f,或者您可以使用! -type d以避免匹配目录名称。使用-type lto 来匹配符号链接。

最终find命令可能如下所示:

find . -type l -name '*_*_*' ! -name '*_*_*_*' -delete

这将删除在当前目录或以下目录中找到的符号链接,其名称恰好包含两个下划线。符号链接的目标不会受到影响,除非它们本身是名称与条件匹配并且位于当前目录下的符号链接。

相关内容