Jak wyświetlić listę wszystkich dowiązań symbolicznych w katalogu

145

Mam w swoim /var/www/katalogu link symboliczny, który prowadzi do WordPress. Kiedy uruchamiam polecenie ls -laz /var/www/katalogu, link do WordPressa nie pojawia się. Czy istnieje sposób na wyświetlenie listy wszystkich dowiązań symbolicznych znajdujących się w katalogu?

Izaak
źródło

Odpowiedzi:

80

Można skorzystać grepz lspolecenia do listy wszystkie dowiązania symboliczne znajdujące się w bieżącym katalogu.

Spowoduje to wyświetlenie wszystkich linków obecnych w bieżącym katalogu.

ls -la /var/www/ | grep "\->"
g_p
źródło
5
Zwróci fałszywie dodatni, jeśli masz plik zawierający „ ->”. Wypróbuj prostytouch "foo->"
Sylvain Pineau
7
nie kopiuj i nie wklejaj treści innej odpowiedzi do własnej odpowiedzi. -1
αғsнιη
3
dlaczego nie grepingingować ^l?
Eliran Malka
3
Jak zwykle najlepszą odpowiedzią jest ta z najwyższym +
FractalSpace
Miły! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
283

Parsowanie lsjest złym pomysłem ® , findw takim przypadku wolisz prosty :

find . -type l -ls

Aby przetworzyć tylko bieżący katalog:

find . -maxdepth 1 -type l -ls

Kredyty: Jak sprawić, by powłoka rozpoznała nazwy plików zwrócone przez polecenie `ls -A`, a te nazwy zawierają spacje?

Sylvain Pineau
źródło
find: Unknown argument to -type: 1
ahnbizcad
15
@ahnbizcad: To nie jest 1(jeden), ale l(link)
Sylvain Pineau
3
Świetna odpowiedź! Zmodyfikowałem mój, aby nie schodził w dół do ścieżki katalogu: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Dziękuję!
bgs
3
Tylko dla bieżącego katalogu (tzn. Nie rekurencyjnego ) dodaj -maxdepth 1.
Joshua Pinter,
1
@ cig0 nie musisz używać awk, prawdopodobnie chcesz tylko tego:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

ls -lakomenda wyświetla wszystkie pliki i foldery, a także symboliczną związaną katalogu, jeśli ta komenda nie wykazuje żadnego katalogu symboliczne oznacza to, że nie mają symboliczny link do WordPressa .

zobacz wynik działania ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Zobaczysz, że wszystkie katalogi symboliczne mają luprawnienia na początku flag uprawnień. a jeśli weźmiesz grep ^l, możesz wyświetlić tylko symboliczne pliki lub katalog:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

katalog sterownika i podsystemu to symboliczne łącze do innego katalogu tutaj.

αғsнιη
źródło
1
Drobna specyfikacja tutaj ... pierwszy znak ciągu uprawnień nie jest tak naprawdę pozwoleniem. To typ pliku. Jak już wspomniałeś loznacza to symboliczny link.
conner.xyz 04.04.16
5

grep jest twoim przyjacielem:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

Spowoduje to wyświetlenie wierszy zaczynających się na „l”, które reprezentują łącza w kolumnie perms zamiast lużycia ddla katalogów i -plików

Kalibur
źródło
3

POSIXly:

find ! -name . -prune -type l
Cuonglm
źródło
1

Aby wyświetlić dowiązania symboliczne w katalogu:

  1. Otwórz terminal i przejdź do tego katalogu.

  2. Wpisz polecenie:

    ls -la
    

    Spowoduje to długą listę wszystkich plików w katalogu, nawet jeśli są one ukryte.

  3. Pliki, które zaczynają się, lto twoje dowiązania symboliczne.

sandeep srivastav vaddiparthy
źródło
1
-1: Odpowiedź KasiyA już to obejmuje.
muru
1

Zwraca wszystkie symbolicznie połączone elementy (zarówno katalogi jak i fns) w katalogu:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

Jednak w celu rozróżnienia między rzeczywistymi symbolicznie połączonymi typami przedmiotów:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Zwraca tylko symbolicznie połączone nazwy plików. I,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Zwraca tylko symbolicznie połączone nazwy katalogu.

odoncaoa
źródło
0

Wpisz ls -lai, wyświetli listę wszystkich plików i podkatalogów z odpowiednimi numerami i-węzłów. Wiesz, że pliki o tym samym numerze i-węzła są linkami (twardymi lub miękkimi), a to rozwiązanie działa również dla dowiązań symbolicznych.

saptarshi nag
źródło
ls -laiczy nie pokazać tego samego numeru węzła dla pliku i jego symbolicznych linków. W przeciwieństwie do dowiązań twardych dowiązania symboliczne mają własne osobne wpisy i-węzłów. Tak to wygląda.
Eliah Kagan
0

Można to zrobić również za pomocą Pythona:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Przykładowy przebieg:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

Można to rozszerzyć, aby było rekurencyjne za pomocą os.walkfunkcji, ale wystarczy użyć prostego generowania listy do wyświetlania linków w jednym katalogu, jak pokazano powyżej.

Sergiy Kolodyazhnyy
źródło