Bir dizindeki tüm sembolik bağlantılar nasıl listelenir?


Yanıtlar:


80

Geçerli dizinde bulunan tüm sembolik bağlantıları listelemek grepiçin lskomutla birlikte kullanabilirsiniz .

Bu, mevcut dizinde bulunan tüm bağlantıları listeler.

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

5
" ->" İçeren bir dosyanız varsa yanlış pozitif döndürür . Basit bir deneyintouch "foo->"
Sylvain Pineau

7
lütfen başka bir cevabın içeriğini kopyalayıp kendi cevabınıza yapıştırmayın. -1
αғsнιη

3
neden olmasın grepile ing ^l?
Eliran Malka

3
Her zamanki gibi, en iyi cevap en yüksek
olanıdır

Güzel! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke

284

Ayrıştırma lsbir Bad Idea ® ' dır find, bu durumda basit bir yöntem tercih edin:

find . -type l -ls

Sadece geçerli dizini işlemek için:

find . -maxdepth 1 -type l -ls

Credits: `ls -A` komutu tarafından döndürülen dosya adlarını tanımak için kabuğunu nasıl kullanırım ve bu adlar boşluk içeriyor mu?


find: Unknown argument to -type: 1
ahnbizcad

15
@ahnbizcad: O değil 1(bir) ama l(bağlantı)
Sylvain Pineau

3
Mükemmel cevap! Benimki gibi dizin yolu aşağı inmeyecek şekilde ayarlandı: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Teşekkürler!
bgs

3
Sadece geçerli dizin için (yani özyinelemeli değil ) ekleyin -maxdepth 1.
Joshua Pinter

1
@ cig0 u kullanmanız gerekmez awk, muhtemelen sadece şunu find . -maxdepth 1 -type l | sort -n
isteyin

10

ls -laBu komut size simgesel bir bağlantı olmadığı anlamına gelir herhangi sembolik dizin gelmezse komut, tüm dosyaları ve klasörleri ve ayrıca sembolik bağlantılı dizini göstermek WordPress .

koşu sonucuna bakın 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

Tüm sembolik dizinin lizin bayraklarının dilenmesinde izinli olduğunu göreceksiniz . ve bir grep ^lalırsanız sadece sembolik dosyaları veya dizini listeleyebilirsiniz:

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$ 

Sürücü ve alt sistem dizini, buradaki diğer dizine sembolik bağdır.


1
Burada küçük özellikler ... izin dizesinin ilk karakteri gerçekten izin değil. Bu dosya tipi. Sizin de belirttiğiniz gibi l, bunun sembolik bir bağlantı olduğu anlamına geliyor.
conner.xyz

5

grep senin arkadaşın:

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

Bu, dizinler ve dosyalar için lkullanım yerine izinler sütununda Bağlantıları temsil eden "l" ile başlayan satırları listeler.d-



1

Bir dizindeki sembolik bağlantıları görüntülemek için:

  1. Bir terminal açın ve bu dizine gidin.

  2. Komutu yazın:

    ls -la
    

    Bu, gizli olsalar bile dizindeki tüm dosyaları listeleyecektir.

  3. Başlayan dosyalar, lsembolik bağlantı dosyalarınızdır.


1
-1: KasiyA'nın cevabı zaten bunu kapsıyor.
muru

1

Bu, bir dizindeki sembolik olarak bağlı tüm öğeleri (her iki dir ve fns) döndürür:

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

Ancak, sembolik olarak bağlanmış gerçek öğe türlerini ayırt etmek için:

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

Yalnızca sembolik bağlantılı dosya adı öğelerini döndürür. Ve,

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

Yalnızca sembolik olarak bağlı dizin ismi öğelerini döndürür.


0

Tür ls -lai, bu inode numbers.You aynı inode numarası ile dosyaları biliyorum karşılık gelen tüm dosya ve alt listeler vardır (sert veya yumuşak) bağlantıları ve bu çözüm de sembolik bağlantıları için çalışır.


ls -laiyok değil bir dosya ve sembolik bağlantılar için aynı inode numarasını gösterir. Sabit bağlantıların aksine, sembolik bağlantıların kendi ayrı inode girişleri vardır. Göründüğü gibi.
Eliah Kagan

0

Python ile de yapılabilir:

$ 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

Örnek çalışma:

$ 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

Bu os.walkfonksiyon aracılığıyla özyinelemeli olacak şekilde genişletilebilir , ancak yukarıda gösterdiğim gibi tek bir dizindeki bağlantıları listelemek için basit liste oluşturmayı kullanmak yeterlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.