1

Я хотел бы найти файлы, имена которых содержат "Mar" или "Jun", как я могу это сделать?

3 ответа3

6

Ваш первый подход (find . -type f -name "Mar" -name "Jun") имел две проблемы:

  • find объединяет разные правила, используя логические "и" по умолчанию
  • Вы сделали точное совпадение имени

Таким образом, единственными возможными совпадениями были файлы, которые были названы точно "Jun" и "Mar", то есть ни одного.


Вместо этого сделайте следующее:

  • Вы можете использовать подстановочные знаки в поиске имени (* означает любую возможную пустую последовательность символов), заключенную в кавычки, чтобы предотвратить интерпретацию оболочкой
  • объединить два правила с -o (или) - для этого вам нужно заключить альтернативные правила в круглые скобки, чтобы переопределить обычный приоритет операторов или повторить общее правило -type f

Пример:

$ ls -1
1st-of-June
January
March
$ find . -type f -name '*Mar*' -o -type f -name '*Jun*'
./1st-of-June
./March
3

Используйте find и опцию regex :

find -regex '.*\(Mar\|Jun\).*'
0

Эта команда будет работать

[max@localhost ~]$ find / -type f -name Mar -o -name Jun
./Mar
./Jun

ОБНОВИТЬ

Тогда это ответ

find / -type f -name "*Mar*" -o -type f -name "*Jun*"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .