Jeśli uruchomię to polecenie, find $HOME/MySymlinkedPath -name "run*.sh"
nic się nie stanie i nie spowoduje błędu („MySymlinkedPath” to dowiązanie symboliczne do innego dysku twardego innego niż mój $ HOME).
Te również się nie udają:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
I żeby się upewnić, ta nieistniejąca ścieżka zawodzi (oczywiście), find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"
więc ścieżka jest odnajdywana (ponieważ ten błąd się nie zdarza), ale find
nie wykonuje na niej wyszukiwania, a ja jestem teraz dość nieświadomy.
Działa to tylko wtedy, gdy cd $HOME/MySymlinkedPath
najpierw usunę takie odwołanie do ścieżki, find -name "run*.sh"
ale to nie jest dobre dla moich skryptów.
Dodatkowa informacja :
to polecenie działa jak zwykle ls $HOME/MySymlinkedPath/run*.sh
, a jeśli pójdę tam cd $HOME/MySymlinkedPath
i uruchomię to, ls ..
wynik nie jest tym, czego się spodziewałem - lista ścieżki, na której znajduje się ścieżka dowiązana symbolicznie - zwraca listę prawdziwej ścieżki na inny nośnik / dysk twardy !!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Re-myślenie :
Czy ten problem find
i ls
czy z moim systemem? czy jest to oczekiwane i wcale nie stanowi problemu? Jestem na Ubuntu 12.10. Nie działa na wszystkich testowanych terminalach, więc nie wydaje się „problemem” terminala.
Odpowiedzi:
Oto odpowiedź. Ale to pytanie wskazuje na bash jako cel problemu.
Wyjaśnienie jest, że
find
znaleziska"$HOME/MySymlinkedPath"
. To dowiązanie symboliczne, a nie katalog, więc rekurencyjne zejście się na tym kończy. Jeśli wyrażenie pasuje"$HOME/MySymlinkedPath"
(na przykład infind "$HOME/MySymlinkedPath" -name 'My*'
),find
wydrukuje to jako dopasowanie.Jak wskazałem tam, stwierdziłem, że najłatwiejszym / najczystszym sposobem radzenia sobie z tym i naprawy wszystkich skryptów jest zamiast:
wystarczy dodać ukośnik, aby
find
nie zaczynał się od dowiązania symbolicznego, ale od celu dowiązania symbolicznego:Możesz też przekazać
-H
opcjęfind
(zwróć uwagę, że musi ona być na pierwszym miejscu, przed ścieżkami), aby kazać jej przechodzić przez dowiązania symboliczne przekazane w wierszu polecenia. (Różni się to od tego,-L
który każefind
przechodzić dowiązania symboliczne napotkane również podczas rekurencyjnego opadania).I wreszcie działało to najlepiej tutaj
-L
(ze względu na kilka systemów plików, które dowiązałem symbolicznie przez foldery). Ale generuje mnóstwo nieproblemowych komunikatów o błędach, więc dodałem2>/dev/null
; i postanowił również utworzyć ten aliasalias find='find -L'
:źródło