删除文件匹配模式


32

我需要递归删除所有子目录中的所有文件,其中文件名包含一个数字,后跟一个“ x”,然后一个数字,至少两次。

例:

我想删除这些文件:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

但我不想删除这些文件:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

我该怎么做(从bash shell)

Answers:


61

x且仅当字符串包含数字后跟x数字时(即,如果包含与模式匹配的子字符串),则字符串包含“数字后跟数字” [0-9]x[0-9]。因此,您要删除名称与模式匹配的文件*[0-9]x[0-9]*[0-9]x[0-9]*.jpg

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

如果您find没有-delete,请致电rm删除文件。

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
谢谢!2秒后,消失了12.000个文件。那节省了我一些体力劳动!
mikkelbreum

在Windows上的Bash中,我都-delete没有-exec rm工作。但这确实做到了:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn 2015年

2
@Tamlyn使用-print0xargs -0,否则命令将失败,文件名包含空格或单引号。但是,-delete并且-exec rm 可以在Windows上运行。如果某事不起作用,那不是由于它们的使用。
吉尔斯(Gilles)'所以

Windows也可以使用吗?
CodyBugstein 2015年

如果您拥有Cygwin或GNUWin32等Unix实用程序的端口,它将可以使用。显然,它在Windows上无法立即使用。注意Windows有一个不相关的程序find,因此请确保Unix实用程序是第一个PATH
吉尔斯(Gilles)'所以别再邪恶了'

0

正确的命令是:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

这只会抓取名称为“ aaa-12x12.jpg”的文件,而不是“ aaa-12x12red.jpg”的文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.