Wenn ich diesen Befehl ausführe find $HOME/MySymlinkedPath -name "run*.sh"
, passiert nichts und gibt keinen Fehler aus ('MySymlinkedPath' ist ein verknüpfter Pfad zu einer anderen Festplatte als meiner $ HOME-Festplatte).
Dies schlägt auch fehl:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
Und nur um sicherzugehen, dass dieser nicht vorhandene Pfad (natürlich) fehlschlägt, find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"
sodass der Pfad gefunden wird (weil dieser Fehler nicht auftritt), aber find
keine Suche darauf durchführt, und ich bin jetzt sehr ahnungslos.
Es funktioniert nur, wenn ich cd $HOME/MySymlinkedPath
zuerst die Pfadreferenz wie folgt entferne, find -name "run*.sh"
aber das ist nicht gut für meine Skripte.
Eine zusätzliche Information :
Dieser Befehl funktioniert wie gewohnt ls $HOME/MySymlinkedPath/run*.sh
, und wenn ich dorthin gehe cd $HOME/MySymlinkedPath
und dies ausführe, entspricht ls ..
das Ergebnis nicht meinen Erwartungen - die Liste des Pfads, in dem sich der verknüpfte Pfad befindet - und gibt die Liste des tatsächlichen Pfads zurück das andere Medium / Festplatte !!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Überdenken :
Ist das ein Problem mit find
und ls
oder mit meinem System? oder wird es erwartet und überhaupt kein problem ?? Ich bin auf Ubuntu 12.10. Es schlägt auf allen von mir getesteten Terminals fehl und scheint daher kein "Problem" des Terminals zu sein.
Antworten:
Hier ist die Antwort. Diese Frage deutet jedoch darauf hin, dass Bash das Ziel des Problems ist.
Die Erklärung ist, dass
find
findet"$HOME/MySymlinkedPath"
. Es ist ein symbolischer Link, kein Verzeichnis, daher stoppt der rekursive Abstieg dort. Wenn der Ausdruck übereinstimmt"$HOME/MySymlinkedPath"
(z. B. infind "$HOME/MySymlinkedPath" -name 'My*'
), wird erfind
als Übereinstimmung gedruckt.Wie dort erwähnt, stellte ich fest, dass der einfachste / sauberste Weg, damit umzugehen und alle Skripte zu reparieren, statt:
Fügen Sie einfach einen Schrägstrich hinzu, damit dieser
find
nicht vom symbolischen Link, sondern vom Ziel des symbolischen Links ausgeht:Alternativ können Sie die
-H
Option anfind
(beachten Sie, dass sie vor den Pfaden stehen muss) übergeben, um sie anzuweisen, symbolische Links zu durchlaufen, die über die Befehlszeile übergeben wurden. (Dies unterscheidet sich von-L
der Anweisungfind
, symbolische Verknüpfungen zu durchlaufen, die auch während des rekursiven Abstiegs auftreten.)Und schließlich hat es hier am besten funktioniert
-L
(aufgrund der verschiedenen Dateisysteme, die ich über Ordner verknüpft habe). Aber es erzeugt eine Menge unproblematischer Fehlermeldungen, also habe ich hinzugefügt2>/dev/null
; und beschlossen auch, diesen Alias zu erstellenalias find='find -L'
:quelle