Вопрос

Эта часть " (-name * txt -o -name * html) " смущает меня в коде:

find $HOME \( -name \*txt -o -name \*html \) -print0 | xargs -0 grep -li vpn

Может ли кто-нибудь объяснить скобки и " -o " ;? Является ли "-o" команда или параметр? Я знаю, что скобки экранированы с помощью " \ " а зачем они?

Это было полезно?

Решение

По умолчанию условия в списке аргументов поиска 'и' объединены. Параметр -o означает «или».

Если вы написали:

find $HOME -name \*txt -o -name \*html -print0

тогда нет никакого выходного действия, связанного с именами файлов, заканчивающимися на 'txt', поэтому они не будут напечатаны. Группируя параметры имени в круглых скобках, вы получаете файлы html и txt.

<Ч>

Рассмотрим пример:

mkdir test-find
cd test-find
cp /dev/null file.txt
cp /dev/null file.html

Комментарии ниже имеют интересный побочный эффект. Если команда была:

find . -name '*.txt' -o -name '*.html'

тогда, поскольку явное действие не указано ни для одной из альтернатив, для обеих альтернатив используется действие -print (не -print0 !), и оба файла перечислены , С -print или другим явным действием после одной из альтернатив (но не другой) вступает в силу только альтернатива с действием.

find . -name '*.txt' -print -o -name '*.html'

Это также говорит о том, что у вас могут быть разные действия для разных альтернатив. Вы также можете применить другие условия, такие как время модификации:

find . \( -name '*.txt' -o -name '*.html' \) -mtime +5 -print0

find . \( -name '*.txt'  -mtime +5 -o -name '*.html' \) -print0

Первая печатает txt или html файлы старше 5 дней (поэтому ничего не печатает для примера каталога - файлы имеют несколько секунд); вторая печатает текстовые файлы старше 5 дней или HTML-файлы любого возраста (так что просто file.html). И так далее ...

Спасибо DevSolar за его комментарии, приведшие к этому дополнению.

Другие советы

" -o " означает ИЛИ. То есть имя должно заканчиваться на "txt" или "html". Скобки просто объединяют два условия.

(и) предоставляют способ группировки параметров поиска для команды поиска. -O является "или" Оператор.

Эта команда поиска найдет все файлы, заканчивающиеся на " txt " или " html " и передайте их как аргументы команде grep.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top