In dieser Frage geht es darum, Verzeichnisse in einem aktuellen Verzeichnis zu finden. Die Lösung ist im Grunde:
ls -d */
Das ist großartig, aber wie kann ich einfach Symlinks auflisten? Muss ich so etwas benutzen?
find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)
Oder gibt es einen einfacheren Weg? Kann ich dafür verwendet werden?
man find
Shows,-d
die ein Synonym für-depth
(aus Kompatibilitätsgründen mit FreeBSD, NetBSD, MacOS X und OpenBSD) sind, d. H. es ist nicht dasselbe wie-maxdepth
. . .-depth
Antworten:
In zsh (
N
in Klammern hinzufügen , um Symlinks einzuschließen, deren Name mit a beginnt.
):Bei den meisten
find
Implementierungen:POSIX-konform:
Oder mit einer Shell-Schleife:
quelle
-prune
Option müssen Sie verwendenfind topdir ! -name topdir -prune
; Andernfalls wird auch das Startverzeichnis ignoriert.Dies ist nicht auf einem Mac, aber
funktioniert bei mir.
quelle
Sie sollten verwenden
-type
und nicht-xtype
:Die Standardeinstellung ist
-P
, daher versucht die Option -xtype, die resultierende Datei zu ermitteln, nicht den Symlink selbst. Eigentlich bekomme ich einige positive Ergebnisse, was wie ein Fehler erscheint. Das-P -xtype l
sollte true (auf einem Symlink) zurückgeben, wenn das Ergebnis selbst ein symbolischer Link ist.Kann auch verwenden: Hier
ls -FA | sed -ne 's/@//p'
werden nur die Symlinks angezeigt.quelle
sed -ne 's/@//p'
(und auchsed -ne 's/@$//p'
) ist kein sicherer Test, als die erste Version wird ein falsch positive geben , wenn@
überall in der auftritt ls Ausgabe, und die zweiter wird eine falsche postive zurück , wenn ein Dateiname tatsächlich endet in@
So finden Sie nur die Dateien heraus, die Symlinks im aktuellen Verzeichnis sind:
Dadurch werden alle Symlink-Dateien rekursiv aufgelistet. Außerdem werden die tatsächlichen Dateien angezeigt, auf die es verweist.
quelle