Я использую FreeBSD, и я понимаю и использую опцию -prune в find чтобы предотвратить спуск команды в подкаталог. Но я нахожу необходимый синтаксис очень неуклюжим и неловким. Это также не предотвращает появление самого обрезанного режиссера, что исправимо, но раздражает.
Я хотел бы создать короткий скрипт / псевдоним, который будет добавлять новый -noenter к команде find если он указан перед любыми другими основными цветами (для простоты).
Цель состоит в том, чтобы я мог напечатать любой из:
find -xs /dir -noenter '$*' -name '*.conf' -lsfind -x -s /dir -noenter '$*' -name '*.conf' -ls
и он преобразует аргументы и выполнит:
/usr/bin/find -xs /dir \( -name '$*' -prune -or \( -name '*.conf' -and ! \( -type d -and -name '$*' \) \) \) -ls/usr/bin/find -x -s /dir \( SNIPPED \) -ls
но я также могу набрать как обычно любую обычную команду "find", и она будет прозрачно передавать ее в /usr//bin/find для выполнения.
По логике сценарий должен идентифицировать первый аргумент после имени dir, а затем проверить:
- ... равно
-noenterи сопровождается как минимум еще двумя аргументами (в этом случае я знаю, как построить аргумент, который мне нужно передать в/usr/bin/find, зная, какие аргументы были до / после него); или же - ... равно
-noenterно не сопровождается как минимум еще 2 аргументами (= ошибка); или же - ... что-либо еще или dir было последним аргументом или не было найдено (= передать все исходные аргументы в
/usr/bin/findбез изменений).
Я могу сделать все это, кроме одной вещи - как мне кодировать ту часть скрипта, которая проверяет argv, чтобы определить, какой номер arg (если есть) является аргументом dir ?
Мой выбор оболочки - это sh для сценариев.
