удалить файлы, соответствующие шаблону


32

Мне нужно рекурсивно удалить все файлы во всех подкаталогах, где имя файла содержит число, за которым следует «x», за которым следует число, как минимум два раза.

Пример:

Я хотел бы удалить эти файлы:

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

Но я не хочу удалять эти файлы:

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

Как я могу это сделать (из оболочки Bash)

Ответы:


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
Спасибо! 12.000 файлов прошло 2 секунды. Это спасло меня от ручного труда!
mikkelbreum

Ни Bash на Windows -deleteне -exec rmработал для меня. Но это сделал:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Тамлин

2
@Tamlyn Используйте -print0и xargs -0, в противном случае команда не будет работать с именами файлов, содержащими пробелы или одинарные кавычки. Но -deleteи -exec rm сделать работу на Windows. Если что-то не работает, это не из-за их использования.
Жиль "ТАК - перестань быть злым"

Будет ли это работать и с Windows?
CodyBugstein

Это будет работать, если у вас есть порт утилит Unix, таких как Cygwin или GNUWin32. Очевидно, что это не будет работать из коробки на Windows. Позаботьтесь о том, чтобы в Windows использовалась не связанная программа find, поэтому убедитесь, что утилиты Unix стоят первыми PATH.
Жиль "ТАК - перестать быть злым"

0

Правильная команда:

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

он будет захватывать только файлы с именами: «aaa-12x12.jpg», но не «aaa-12x12red.jpg»

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.