Dateien nach Symlink-Ziel auflisten


23

Wie erhalte ich eine Dateiliste (und mache dann etwas mit dieser Liste), indem ich nach dem symbolischen Link- Zielnamen und nicht nach dem Symlink-Namen filtere? Zum Beispiel aus der folgenden Liste interessiere ich mich nur für die ersten vier Dateien (Ziel enthält bar):

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc

Antworten:


31

Mit find können Sie alle Dateien vom Typ symlink abrufen und die -ilnameOption hinzufügen , nach dem Namen des Verknüpfungsziels zu suchen. Dies funktioniert genauso, -inamenur für den Linkzielnamen anstelle des Linknamens.

find -type l -ilname "*bar*"

Der Name des Links wird weiterhin ausgedruckt, nicht das Ziel. Wenn Sie die Namen der Ziele drucken möchten, versuchen Sie Folgendes:

find -type l -ilname "*bar*" -printf "%l\n"

Oder erhalten Sie eine vollständige lsStilausgabe

find -type l -ilname "*bar*" -ls

Was Sie unter " Mit der Liste etwas anfangen" verstehen, ist unklar. Wenn Sie jedoch die Verknüpfungsdateien bearbeiten möchten, können Sie das folgende -execArgument verwenden:

find -type l -ilname "*bar*" -exec touch {} \;

Wenn Sie jedoch die Verbindungsziele bearbeiten müssen, müssen Sie die verwenden -printf, um die Zielwerte abzurufen, und dann xargsoder eine andere Schleife selbst ausführen. Sie könnten so etwas tun:

find -type l -printf "%l\n" | grep bar | xargs touch

... das auch zeigt, wie man grepanstelle des find -ilnameNamensvergleichs verwendet, obwohl man das auch so machen kann.


danke Caleb! Sie haben meine sofortige Frage vollständig beantwortet und einige Seitenkanalfälle behandelt, die ich auf jeden Fall auch verwenden werde.
— Matt Wilkie

1
find /dev/disk/ -type l -ilname "*sde*"Irgendeine Idee, warum das nicht funktioniert?
— Aquarius Power

Benötigt GNU find.
— Ceving
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.