Я хотел бы найти файлы, имена которых содержат "Mar" или "Jun", как я могу это сделать?
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*"