В моей системе много каталогов, структура которых выглядит следующим образом:
\-----data
\------- 001abc
\------- 002abc
\------- 003abc
\------- 004abc
\------- 005abc
\ ....
Когда я хочу найти определенный каталог, я просто набираю find . -iname "002abc*"
, но как мне найти каталог? исключая определенные совпадения имен?
Нечто подобное в MySQL select * from folder where filename != '0021bc'
Вы можете найти «все» папки, а затем выбрать ту, которая вам не нужна, с помощью 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"
Вам придется настроить его на то, что вы хотите, и я рад повторить. Если вы прочитаете справочную страницу для поиска, вы также найдете множество флагов для сортировки файлов и папок.
Используйте !
в команде find
для отмены (инвертирования) опции, следующей после. В вашем случае:
find . ! -iname "002abc*"
и, при необходимости, только соответствующие папки:
find . ! -iname "002abc*" -type d
перечислит все папки, кроме названных, соответствующих шаблону 002abc*
.
Иногда !
может быть проблематично в сценариях оболочки, поэтому , как указал Флимм , параметр -not
является очень полезным синонимом для него.