Korzystam z FreeBSD i rozumiem i używam tej -prune
opcji, find
aby zapobiec zejściu polecenia do podkatalogu. Ale uważam, że niezbędna składnia jest bardzo niezdarna i niezręczna. Nie zapobiega również wyświetlaniu samego przyciętego katalogu, który można naprawić, ale irytuje.
Chciałbym utworzyć krótki skrypt / alias, który -noenter
spowoduje dodanie nowego argumentu do find
polecenia, jeśli zostanie podany przed innymi podstawowymi (dla uproszczenia).
Chodzi o to, że mogę wpisać dowolny z:
find -xs /dir -noenter '$*' -name '*.conf' -ls
find -x -s /dir -noenter '$*' -name '*.conf' -ls
i skonwertuje argumenty i wykona:
/usr/bin/find -xs /dir \( -name '$*' -prune -or \( -name '*.conf' -and ! \( -type d -and -name '$*' \) \) \) -ls
/usr/bin/find -x -s /dir \( SNIPPED \) -ls
ale mogę również normalnie wpisać dowolną rutynową komendę „znajdź” i przekaże ją w sposób przezroczysty /usr//bin/find
do wykonania.
Logicznie skrypt musi zidentyfikować pierwszy argument po nazwie katalogu, a następnie sprawdzić, czy jest to:
- ... równa się
-noenter
i następuje co najmniej 2 kolejne argumenty (w takim przypadku wiem, jak zbudować argument, do którego muszę przejść/usr/bin/find
, wiedząc, które argumenty były przed nim / po nim); lub - ... równa,
-noenter
ale nie następuje po niej jeszcze 2 argumentów (= błąd); lub - ... cokolwiek innego lub katalog był ostatnim argumentem lub nie został znaleziony (= przekaż całe oryginalne argumenty do
/usr/bin/find
niezmienionego).
Mogę to wszystko zrobić z wyjątkiem jednej rzeczy - w jaki sposób kodować część skryptu, która bada argument argv, aby stwierdzić, który numer argumentu (jeśli istnieje) jest dir
argumentem?
Mój wybór powłoki dotyczy sh
skryptów.
find -x -noenter .....
powinien to być błąd). Sądzę, że musi sprawdzić arg po „dir”. Prawdopodobnie potrafię to rozgryźć na podstawie tego, co napisałeś, więc jest bardzo blisko. Czy chcesz edytować odpowiedź, aby ją zaakceptować, czy?