Как исключить каталог по имени, используя find?

В моей системе много каталогов, структура которых выглядит следующим образом:

\-----data
       \------- 001abc
       \------- 002abc
       \------- 003abc
       \------- 004abc
       \------- 005abc
       \ ....

Когда я хочу найти определенный каталог, я просто набираю find . -iname "002abc*", но как мне найти каталог? исключая определенные совпадения имен?

Нечто подобное в MySQL select * from folder where filename != '0021bc'

7
задан 15 January 2013 в 18:43

3 ответа

Вы можете найти «все» папки, а затем выбрать ту, которая вам не нужна, с помощью grep -v (или, например, egrep)

find . -iname "abc*" | grep -v 002

Если вы хотите выбрать более одной имя, вы можете использовать последовательный grep -v или один оператор egrep.

find . -iname "abc*" | grep -v 002 | grep -v 003

или

find . -iname "abc*" | egrep -v "002|003"

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

0
ответ дан 15 January 2013 в 18:43
find -name 0021bc -prune -o -print
0
ответ дан 15 January 2013 в 18:43

Используйте ! в команде find для отмены (инвертирования) опции, следующей после. В вашем случае:

find . ! -iname "002abc*"

и, при необходимости, только соответствующие папки:

find . ! -iname "002abc*" -type d

перечислит все папки, кроме названных, соответствующих шаблону 002abc*.

Иногда ! может быть проблематично в сценариях оболочки, поэтому , как указал Флимм , параметр -not является очень полезным синонимом для него.

0
ответ дан 15 January 2013 в 18:43

Другие вопросы по тегам:

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