Korzystam z FreeBSD i rozumiem i używam tej -pruneopcji, findaby 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 -noenterspowoduje dodanie nowego argumentu do findpolecenia, jeśli zostanie podany przed innymi podstawowymi (dla uproszczenia).
Chodzi o to, że mogę wpisać dowolny z:
find -xs /dir -noenter '$*' -name '*.conf' -lsfind -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/finddo wykonania.
Logicznie skrypt musi zidentyfikować pierwszy argument po nazwie katalogu, a następnie sprawdzić, czy jest to:
- ... równa się
-noenteri 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,
-noenterale 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/findniezmienionego).
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 dirargumentem?
Mój wybór powłoki dotyczy shskryptó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?