Vraag Hoe alle symbolische koppelingen in een map te vermelden


Ik heb een symbolische link in mijn /var/www/ map die linken naar WordPress. Wanneer ik het commando uitvoer ls -la van de /var/www/ map de link naar WordPress verschijnt niet. Is er een manier om alle symbolische koppelingen in een map op te sommen?


97
2017-09-09 17:56


oorsprong


Dat lijkt nuttig. Bedankt voor de tip! - wisaac407
mogelijk duplicaat van Hoe te vinden en een lijst te maken van alle symbolische links gemaakt voor een bepaald bestand? - Avinash Raj


antwoorden:


Je kunt gebruiken grep met ls commando om een ​​lijst weer te geven van alle symbolische koppelingen in de huidige map.

Hiermee worden alle koppelingen in de huidige map weergegeven.

ls -la /var/www/ | grep "\->"

58
2017-09-09 18:02



Het geeft false positive terug als je een bestand hebt met "->Probeer een eenvoudig touch "foo->" - Sylvain Pineau
kopieer en plak alsjeblieft de inhoud van een ander antwoord niet naar je eigen antwoord. -1 - αғsнιη
waarom niet greping met ^l? - Eliran Malka
Zoals altijd is het beste antwoord het antwoord met de hoogste + - FractalSpace
Leuk! → .bash_alias: alias listlinks='ls -l --color | grep "\->"' 8-) - Frank Nocke


Parsing ls is een Slecht idee, liever een simpele find in dat geval:

find . -type l -ls

Om alleen de huidige map te verwerken:

find . -maxdepth 1 -type l -ls

credits: Hoe maak ik de shell om de bestandsnamen te herkennen die worden geretourneerd door een `ls-A` opdracht, en deze namen bevatten spaties?


185
2017-09-09 18:21



find: Unknown argument to -type: 1 - ahnbizcad
@ahnbizcad: Dat is het niet 1 (één) maar l (link) - Sylvain Pineau
Goed antwoord! Ik heb de mijne aangepast om niet in het directorypad af te dalen, zoals dit: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null  Dank je! - bgs
Voor alleen de huidige directory (d.w.z. niet recursief) toevoegen -maxdepth 1. - Joshua Pinter


de ls -la commando toon alle bestanden en mappen en ook symbolisch gekoppelde map, als deze opdracht geen symbolische map toont, betekent dit dat je geen symbolische link naar WordPress.

zie het resultaat van hardlopen 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

Je zult zien dat alle symbolische mappen hebben l toestemming bij het bedelen van machtigingsvlaggen. en als je een grep neemt met ^l u kunt alleen symbolische bestanden of directory weergeven:

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$ 

bestuurder en subsysteem map zijn symbolische link naar andere directory hier.


8
2017-09-09 18:32



Kleine specificatie hier ... het eerste karakter van de permissies-string is niet echt een toestemming. Het is het bestandstype. Zoals je hebt aangegeven l betekent dat het een symbolische link is. - conner.xyz


POSIXly:

find ! -name . -prune -type l

3
2017-09-09 18:24





grep is jouw vriend:

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

Hiermee worden lijnen weergegeven die beginnen met "l" en die Links in de kolom perms vertegenwoordigen in plaats van l gebruik d voor mappen en - voor bestanden


3
2017-10-08 10:22





Type ls -lai, het zal een lijst maken van alle bestanden en submappen met bijbehorende inode-nummers. U weet dat bestanden met hetzelfde inode-nummer de links (hard of zacht) zijn en deze oplossing werkt ook voor de symbolische koppelingen.


0
2017-09-09 18:18



ls -lai doet niet toon hetzelfde inode nummer voor een bestand en zijn symbolische koppelingen. In tegenstelling tot harde koppelingen hebben symbolische koppelingen hun eigen afzonderlijke inode-vermeldingen. Dit is hoe het eruit ziet. - Eliah Kagan


Om de symbolische koppelingen in een map te bekijken:

  1. Open een terminal en ga naar die map.

  2. Typ de opdracht:

    ls -la
    

    Dit zal lang alle bestanden in de directory vermelden, zelfs als ze verborgen zijn.

  3. De bestanden die beginnen met l zijn uw symbolische linkbestanden.


0
2017-09-10 05:43



-1: Het antwoord van KasiyA dekt dit al. - muru


Kan ook met python worden gedaan:

$ 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

Voorbeeldrun:

$ 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

Dit kan worden uitgebreid om recursief via te zijn os.walk functie, maar het is voldoende om eenvoudige lijstgenerering te gebruiken voor listing-links in een enkele directory zoals ik hierboven liet zien.


0
2018-01-09 11:15