有没有办法找到并删除具有这样的模式的文件(其中模式只是文件名中有两个下划线,由字母或数字分隔)
前任。/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 l
to 来匹配符号链接。
最终find
命令可能如下所示:
find . -type l -name '*_*_*' ! -name '*_*_*_*' -delete
这将删除在当前目录或以下目录中找到的符号链接,其名称恰好包含两个下划线。符号链接的目标不会受到影响,除非它们本身是名称与条件匹配并且位于当前目录下的符号链接。