繁体   English   中英

如何删除 linux 中具有特定模式的文件?

[英]how to delete files have specific pattern in linux?

我有一组像这样的图像

12345-image-1-medium.jpg 12345-image-2-medium.png 12345-image-3-large.jpg

我应该用什么模式写给 select 这些图像并删除它们

我也有这些图像不想 select

12345-image-profile-small.jpg 12345-image-profile-medium.jpg 12345-image-profile-large.png

我试过这个正则表达式但没有用

1234-image-[0-9]+-small.*

I think bash not support regex as in Javascript, Go, Python or Java

只要您没有嵌入'\n'字符的文件名,那么以下findgrep就可以:

find . -type f | grep '^.*/[[:digit:]]\{1,5\}-image-[[:digit:]]\{1,5\}'

它将找到当前目录下的所有文件并匹配(1 到 5 位),然后是"-image-" ,然后是另一个(1 到 5 位)。 在您的情况下,使用以下文件:

$ ls -1
123-image-99999-small.jpg
12345-image-1-medium.jpg
12345-image-2-medium.png
12345-image-3-large.jpg
12345-image-profile-large.png
12345-image-profile-medium.jpg
12345-image-profile-small.jpg

除了123-image-99999-small.jpg之外,您请求的文件还匹配,例如

$ find . -type f | grep '^.*/[[:digit:]]\{1,5\}-image-[[:digit:]]\{1,5\}'
./123-image-99999-small.jpg
./12345-image-3-large.jpg
./12345-image-2-medium.png
./12345-image-1-medium.jpg

您可以在命令替换中使用上述内容来删除文件,例如

$ rm $(find . -type f | grep '^.*/[[:digit:]]\{1,5\}-image-[[:digit:]]\{1,5\}')

剩下的文件是:

$ l1
12345-image-profile-large.png
12345-image-profile-medium.jpg
12345-image-profile-small.jpg

如果您find支持-regextype

如果您的find支持regextype允许您指定要使用的正则表达式语法集,您可以使用-regextype grep用于grep语法并使用与上述类似的内容来删除带有-execdir选项的文件,例如

$ find . -type f -regextype grep -regex '^.*/[[:digit:]]\+-image-[[:digit:]]\+.*$' -execdir rm '{}' +

我不知道这是否被 BSD 或 Solaris 等支持,所以在脚本中松开它之前检查一下。 另请注意, [[:digit:]]\+测试(1个或更多)数字,并且不限于您的问题中显示的5位数字。

for pic in 12345*.{jpg,png};do rm $pic;done

有关通配符的更多信息,请查看此处

好的,我用这种模式解决了

12345-image-*[0-9]-*

例如:

rm -rf 12345-image-*[0-9]-*

它匹配所有以12345-image-开头的文件名,然后是一个number -符号以及之后的任何内容

因为我发现它在globbing中不是regex ,我发现这个应用程序真的使用完整

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM