Возможно, вы захотите связать вызовы, чтобы найти (однажды, когда вы узнали, что это возможно, что может быть сегодня). Это, конечно, возможно только до тех пор, пока вы остаетесь в поиске. Как только вы отправляете xargs по конвейеру, это выходит за рамки.
Небольшой пример, два файла a.lst и b.lst:
cat a.lst
fuddel.sh
fiddel.sh
cat b.lst
fuddel.sh
Здесь нет хитрости - просто тот факт, что оба содержат «fuddel», но только один содержит «fiddel».
Предположим, мы этого не знали. Мы ищем файл, который соответствует 2 условиям:
find -exec grep -q fuddel {} ";" -exec grep -q fiddel {} ";" -ls
192097 4 -rw-r--r-- 1 stefan stefan 20 Jun 27 17:05 ./a.lst
Ну, может быть, вы знаете синтаксис для grep или другой программы для передачи обеих строк как условия, но это не главное. Здесь можно использовать любую программу, которая может возвращать истину или ложь, учитывая файл в качестве аргумента - grep был просто популярным примером.
И обратите внимание, вы можете использовать команду find -exec с другими командами поиска, такими как -ls или -delete или что-то подобное. Обратите внимание, что delete не только делает rm (удаляет файлы), но и rmdir (удаляет каталоги).
Такая цепочка читается как комбинация команд AND, если не указано иное (а именно с -or
переключателем (и паренсом (которые требуют маскировки))).
Таким образом, вы не покидаете цепочку поиска, что очень удобно. Я не вижу никакого преимущества в использовании -xargs, так как вы должны быть осторожны при передаче файлов, а это то, что не нужно делать при поиске - он автоматически обрабатывает передачу каждого файла в качестве единственного аргумента для вас.
Если вы считаете, что вам нужна маскировка для фигурных скобок {} , не стесняйтесь посетить мой вопрос, который требует доказательств. Мое утверждение таково: нет.
find
. Большое спасибо!