У меня есть очень специфическая потребность найти неизвестные файлы и каталоги в Solaris с помощью сценария, и я должен иметь возможность исключить полные пути к каталогам из поиска, поскольку они содержат потенциально тысячи неиспользуемых файлов (и это нормально, потому что они являются файлами размещены на других серверах). Я даже не хочу, чтобы поиск выполнял поиск в этих каталогах, поскольку он зависал на сервере (процессор долго работал на 99%), поэтому отправка результатов поиска в egrep для фильтрации этих каталогов - не вариант.
Я знаю, что могу сделать это, чтобы исключить один из нескольких каталогов по имени:
find / -mount -local \( -type d -a \( -name dir1 -o -name dir2 -o dir3 \) \) -prune -o \( -nouser -o -nogroup \) -print
Однако, это будет соответствовать dir1 и dir2 в любом месте структуры каталогов любых каталогов, что является , а не , что я вообще хочу.
Я хочу предотвратить поиск даже в следующих каталогах (например):
/opt/dir1
/opt/dir2
/var/dir3/dir4
И я все еще хочу, чтобы он находил неизвестные файлы и каталоги в следующих каталогах:
/opt/somedir/dir1
/var/dir2
/home/user1/dir1
Я пытался использовать регулярное выражение в аргументах -name, но так как find только сопоставляет «name» с базовым именем того, что он находит, я не могу указать путь. К сожалению, находка Solaris не поддерживает параметры поиска GNU, такие как -wholename или -path, так что я немного облажался.
Моя цель - создать скрипт со следующим синтаксисом:
script.sh "/path/to/dir1,/path/to/dir2,/path/to/dir3"
Как я могу это сделать, используя find и стандартные сценарии sh (/ bin / sh) в Solaris (5.8 и выше)?