2009-09-11 6 views
28

Grundsätzlich möchte ich Folgendes tun:Nur Anzeige von Dateien und Ordnern, die symbolische Links in tcsh oder bash sind

ls -l[+someflags] 

(oder durch andere Mittel), die nur Dateien angezeigt werden, die symbolische Links sind

so würde der Ausgang

aussehen
-rw-r--r-- 1 username grp size date-time filename -> somedir 
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf 

usw.

Zum Beispiel

nur Verzeichnisse zu zeigen, ich habe einen Alias:

alias lsd 'ls -l | grep ^d' 

Ich frage mich, wie nur versteckte Dateien angezeigt werden oder nur versteckt Verzeichnisse?

Ich habe die folgende Lösung, aber es ist nicht die Ausgabe in Farbe nicht angezeigt :(

ls -ltra | grep '\->' 

Antwort

51

alle symbolischen Links in einem Verzeichnis finden:

ls -l `find /usr/bin -maxdepth 1 -type l -print` 

Für die Kotierung von versteckten Dateien:

ls -ald .* 
+0

finden/usr/bin -type l -print | xargs ls -l druckt nicht in Farbe. Wenn ich ls -l es zeigt Farben wie ich habe alias ls 'ls --color = auto' – vehomzzz

+0

Ich habe meine Antwort aktualisiert, um dies zu reflektieren. – ChristopheD

+3

Es gibt ein kleines Problem. Wenn unter/usr/bin keine symbolischen Verknüpfungen vorhanden sind, bedeutet comamnd ls -l, dass das aktuelle Verzeichnis ohne Filter angezeigt wird. –

12

nur für "versteckte" Ordner - Punkt Ordner versuchen:

ls -l .** 

Ja, die beiden Sternchen sind notwendig, sonst bekommst du auch. und .. in den Ergebnissen.

Für Symlinks, na ja, versuchen, die Symlinks Programm: fast da mit grep Lösung

symlinks -v . 

(zeigt alle Symlinks im aktuellen Verzeichnis)

+1

In welcher Shell schließt die Erweiterung von '. **'. 'Und' ..' aus? In bash ist es gleichbedeutend mit '. *', Und es enthält '.' und' ..'. In zsh schließen sowohl '. *' Als auch '. **' * * '.' und' ..' aus. –

+0

"symlinks -v" funktionierte perfekt für mich, dennoch musste ich das Verzeichnis angeben, es funktioniert nicht implizit im aktuellen Verzeichnis, Sie müssen es angeben. – m4l490n

5

Sie waren; Konzentrieren wir uns darauf, Ihnen wieder COLOR zu geben.

Try this:

 
ls --color=always -ltra | grep '->' 
+1

Clever. Ich musste dem Dash in der Grep-Anweisung entkommen: grep '\ ->' –

+0

@JesseFisher: Oder 'grep -e '->'' –

+0

Upvote für die Farbe, aber ich lehne mich an John Shirey ls & grep ... – BuvinJ

3

Try-Flag Dateityp und erhalten von den anhängenden befreien @

ls -F /home/usr/foo | grep "@" | sed 's/@//' 
1

Für (t) csh:

ls --color=always -ltra | grep '\->' 

(Dies ist einfach pbr's answer aber mit dem Bindestrich entkommen.

)

Mac OSX

Auf OSX, ls funktioniert anders, so fügen Sie diese zu Ihrer ~/.cshrc Datei:

setenv CLICOLOR_FORCE 1 # (equivalent of Linux --color=always) 

Und dann rufen:

ls -G -ltra | grep '\->' # (-G is equivalent of ls --color) 
1

Für bash:
Dies bietet eine schöne Ausgabe.

 
sl=`find -L /path/to/target -xtype l`; for links in $sl; do ls --color=always -ltra $links; done | sed 's/^/ /' 
2
echo > linklist.found && $(for i in `find /path/to/dir/ -type l`; do echo `ls -d --color=always $i` `echo " -> "` $(ls -d --color=always `readlink -f $i`) >> linklist.found; echo >> linklist.found; done;) && cat linklist.found | more 

Das ist für mich gut funktioniert jedoch, wenn Sie wird die Suche/das Dateisystem root Sie werden das proc-Verzeichnis

7

Um Display die Symlinks zu verzichten brauchen und was sie verlinken auf:

find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \; 

um

DIESES DIR NUR zu begrenzen

Beispiel Ausgabe (nach ln -s/usr/bin moo):

./moo -> /usr/bin 
8
ls -l | grep lrw 

zeigt nur Symlinks (Dateien und Verzeichnisse). Ich bin mir nicht sicher, wie ich sie bunt bekommen soll.

ls -lad .* 

zeigt nur versteckte Dateien/Verzeichnisse

ls -l | grep drw 

zeigt nur Verzeichnisse.

0

Verbrauch: foo $ path

Verwendet Strompfad, wenn keine angegeben.

#!/bin/bash 

case "$1" in 

    -r) 
    find $2 -type l -print | while IFS= read line ; do ls -l --color=always "$line"; done 
    ;; 

    --help) 
    echo 'Usage: foo [-r] [$PATH]' 
    echo  
    echo '-r Recursive' 
    ;; 


    *) 
    ls --color=always -ltra $1 | grep '\->' 
esac 
4

ein wenig auf die akzeptierte Antwort von @ChristopheD gegeben Verbesserung (coudnt kommentieren die Antwort akzeptiert, da ich genug Ruf nicht)

Ich benutze einen Alias ​​

findsymlinks <path> <depth> 

wo die Alias ist