Я использую FreeBSD, и я понимаю и использую опцию -prune
в find
чтобы предотвратить спуск команды в подкаталог. Но я нахожу необходимый синтаксис очень неуклюжим и неловким. Это также не предотвращает появление самого обрезанного режиссера, что исправимо, но раздражает.
Я хотел бы создать короткий скрипт / псевдоним, который будет добавлять новый -noenter
к команде find
если он указан перед любыми другими основными цветами (для простоты).
Цель состоит в том, чтобы я мог напечатать любой из:
find -xs /dir -noenter '$*' -name '*.conf' -ls
find -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
для сценариев.