![使用“查找”删除具有下划线/字母模式的文件](https://linux22.com/image/151526/%E4%BD%BF%E7%94%A8%E2%80%9C%E6%9F%A5%E6%89%BE%E2%80%9D%E5%88%A0%E9%99%A4%E5%85%B7%E6%9C%89%E4%B8%8B%E5%88%92%E7%BA%BF%2F%E5%AD%97%E6%AF%8D%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6.png)
有没有办法找到并删除具有这样的模式的文件(其中模式只是文件名中有两个下划线,由字母或数字分隔)
前任。/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
这将删除在当前目录或以下目录中找到的符号链接,其名称恰好包含两个下划线。符号链接的目标不会受到影响,除非它们本身是名称与条件匹配并且位于当前目录下的符号链接。