Как искать имена файлов, содержащие число, в определенном месте в bash

#bash #find

#bash #Найти

Вопрос:

Как мне убедиться, что после имени файла в есть число find ? Концептуально:

 find ./directory -name filename{number}.temp 
  

Если я введу

 find ./directory -name filename'[0-9]'*.temp
  

это также даст мне имена файлов формы filename'[0-9]'text.temp .

Комментарии:

1. Вы были очень близки к цели, но ваши кавычки были не того типа и не в том месте, попробуйте find ./directory -name "filename[0-9]*.temp"

Ответ №1:

 find ./directory -regex '.*/filename[0-9][0-9]*.temp'
  

Обратите внимание, что -regex совпадения по всему пути, а не только по имени файла.

Ответ №2:

Более старые версии Unix find не используют регулярные выражения или глобусы в стиле Kornshell. Вы можете использовать либо «?», либо «*» в вашем глобусе, но это все. find Команда на Linux и Mac имеет -regex выражение.

Если ваша find команда не совместима с gnu и не имеет -regex параметра, вам необходимо передать выходные данные в grep :

 find ./directory -name 'filename*.temp' | grep '/filename[0-9].temp$'
  

Комментарии:

1. Ты имеешь в виду grep '/filename[0-9][0-9]*.temp$' ?

2. @RolandIllig — Я изначально не думал, что это необходимо, но вы правы. У меня мог бы быть каталог foo/filename23.temp/filenamefoo.temp , который соответствовал grep бы, но не был правильным файлом. Я изменил свой ответ, чтобы включить ваши предложения.