Есть много хороших ответов, мне потребовалось некоторое время, чтобы понять, для чего предназначен каждый элемент команды, и какая логика стоит за ней.
find . -path ./misc -prune -o -name '*.txt' -print
find начнет поиск файлов и каталогов втекущий каталог, следовательно, find .
.
Параметр -o
обозначает логическое ИЛИ и разделяет две части команды:
[ -path ./misc -prune ] OR [ -name '*.txt' -print ]
Любой каталог или файл, not каталог ./misc не пройдет первый тест -path ./misc
.Но они будут проверены против второго выражения.Если их имя соответствует шаблону *.txt
, которое они напечатали, из-за опции -print
.
Когда find достигает каталога ./misc, этот каталог удовлетворяет только первому выражению.Таким образом, опция -prune
будет применена к нему.Он сообщает команде find, что не исследует этот каталог.Таким образом, любой файл или каталог в ./misc даже не будет проверен командой find, не будет проверен на соответствие второй части выражения и не будет напечатан.