xargs
редко полезно, потому что это ожидает вход, заключенный в кавычки очень специфическим способом, которым не производит никакой общий инструмент. И поскольку Вы заметили mycommand $(find …)
бесполезно, потому что это сначала связывает все имена файлов и затем разделяет в пробеле.
Используйте -exec
основной из find
заставить его выполниться md5
без прошедшей оболочки, которая потребовала бы заключения в кавычки. Если Ваша реализация find
является довольно текущим, затем можно заставить его сделать что xargs
известно, который должен вызвать md5
программа однажды на пакет аргументов.
find /root/newdir -type f -exec md5 {} +
Если Ваш find
не поддерживает -exec … {} +
, замените +
\;
. Это делает find
вызвать md5
для каждого файла в свою очередь. Это немного медленнее, но доступно везде.
На исследовании для подобного find
решение я обнаружил полезное объяснение на том, Как использовать '-чернослив' опция 'находки' в sh? Laurence Gonsalves.
Вы могли использовать что-то как:
find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)
или (без имени)
find . \( -type d -name .hg -prune \) -o \( -type f -print \)
(Завершенные) круглые скобки \(
и \)
сгруппируйте тесты (type
и name
) и соответствующие действия (prune
и print
, соответственно) вместе левый и правый из ИЛИ (-o
).
С тех пор -o
имеет более низкий приоритет, чем сопоставление, можно опустить круглые скобки, если Вам нравится. Многие find
реализации также позволяют Вам пропустить финал -print
.
find . -type d -name .hg -prune -o -type f -name "foo" -print
Взгляните на ack
: http://betterthangrep.com/
В дополнение к наличию разумного набора значения по умолчанию исключил папки (.hg, значение по умолчанию, исключают, например), легко исключить новые папки:
ack --ignore-dir=.directory search_term
Для возвращения этого варианту использования, где Вы ищете список файлов Вы использовали бы -f
опция, как в:
ack -f --ignore-dir=.directory
Я переключился от записи замысловатого, ищут/находят команды на простые ack.
Подсказка: Поместите наиболее часто используемые параметры командной строки (исключенные папки, например) в .ackrc файл.
find | less
в вопросе OP ищет простой список файлов. Как это помогает с этим?
– a CVn
01.04.2015, 08:58
можно попробовать
find \( ! -regex '.*/\.directory\(\|/.*\)' \)
-prune
в первом наборе скобок, и-type f -print
во втором наборе только для создания и/или операции более очевидный, но иначе это выглядит точечным - на мне. – me_and 09.02.2012, 14:35