найдите исключают каталог

xargs редко полезно, потому что это ожидает вход, заключенный в кавычки очень специфическим способом, которым не производит никакой общий инструмент. И поскольку Вы заметили mycommand $(find …) бесполезно, потому что это сначала связывает все имена файлов и затем разделяет в пробеле.

Используйте -exec основной из find заставить его выполниться md5 без прошедшей оболочки, которая потребовала бы заключения в кавычки. Если Ваша реализация find является довольно текущим, затем можно заставить его сделать что xargs известно, который должен вызвать md5 программа однажды на пакет аргументов.

find /root/newdir -type f -exec md5 {} +

Если Ваш find не поддерживает -exec … {} +, замените + \;. Это делает find вызвать md5 для каждого файла в свою очередь. Это немного медленнее, но доступно везде.

13
09.02.2012, 09:40
3 ответа

На исследовании для подобного 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
13
27.01.2020, 19:53
  • 1
    , который я собирался записать своему решению, но это, кажется, точно это. Лично я поместил -prune в первом наборе скобок, и -type f -print во втором наборе только для создания и/или операции более очевидный, но иначе это выглядит точечным - на мне. –  me_and 09.02.2012, 14:35
  • 2
    я улучшил круглые скобки (и их обоснование) благодаря комментарию @me_and. –  fheub 09.02.2012, 14:43

Взгляните на ack: http://betterthangrep.com/

В дополнение к наличию разумного набора значения по умолчанию исключил папки (.hg, значение по умолчанию, исключают, например), легко исключить новые папки:

ack --ignore-dir=.directory search_term

Для возвращения этого варианту использования, где Вы ищете список файлов Вы использовали бы -f опция, как в:

ack -f --ignore-dir=.directory

Я переключился от записи замысловатого, ищут/находят команды на простые ack.

Подсказка: Поместите наиболее часто используемые параметры командной строки (исключенные папки, например) в .ackrc файл.

2
27.01.2020, 19:53
  • 1
    На основе find | less в вопросе OP ищет простой список файлов. Как это помогает с этим? –  a CVn 01.04.2015, 08:58
  • 2
    @MichaelKjörling Как я заявил в своем ответе,-f опция, предоставляет список файлов. –  Brian Leathem 01.04.2015, 19:37

можно попробовать

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
-2
27.01.2020, 19:53
  • 1
    Довольно чертовски уверенный это не делает ничего как какой OP, относительно которого попросили. –  me_and 09.02.2012, 14:33
  • 2
    я просто думал, что это - то, под чем он подразумевает .directory –  yuyichao 09.02.2012, 15:58

Теги

Похожие вопросы