Cara daftar semua tautan simbolis dalam direktori

Jawaban:

80

Anda dapat menggunakan grepdengan lsperintah untuk mendaftar semua tautan simbolik yang ada di direktori saat ini.

Ini akan mencantumkan semua tautan yang ada di direktori saat ini.

ls -la /var/www/ | grep "\->"
g_p
sumber
5
Ini akan mengembalikan false positive jika Anda memiliki file yang berisi " ->". Coba yang sederhanatouch "foo->"
Sylvain Pineau
7
tolong jangan menyalin & menempel konten dari jawaban lain ke jawaban Anda sendiri. -1
αғsнιη
3
mengapa tidak greping dengan ^l?
Eliran Malka
3
Seperti biasa, jawaban terbaik adalah yang + tertinggi
FractalSpace
Bagus! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
285

Parsing lsadalah Bad Idea ® , lebih suka yang sederhana finddalam hal ini:

find . -type l -ls

Untuk hanya memproses direktori saat ini:

find . -maxdepth 1 -type l -ls

Kredit: Bagaimana saya membuat shell untuk mengenali nama file yang dikembalikan oleh perintah `ls -A`, dan nama-nama ini mengandung spasi?

Sylvain Pineau
sumber
find: Unknown argument to -type: 1
ahnbizcad
15
@ahnbizcad: Ini bukan 1(satu) tetapi l(tautan)
Sylvain Pineau
3
Jawaban bagus! Saya menyesuaikan milik saya untuk tidak turun ke jalur direktori seperti ini: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Terima kasih!
bgs
3
Hanya untuk direktori saat ini (yaitu tidak rekursif ) tambahkan -maxdepth 1.
Joshua Pinter
1
@ cig0 kamu tidak perlu menggunakan awk, kamu mungkin ingin ini saja:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

yang ls -laperintah menampilkan semua file dan folder dan direktori terkait juga simbolik, jika perintah ini tidak menunjukkan direktori simbolik itu berarti Anda tidak memiliki link simbolik ke WordPress .

lihat hasil menjalankan 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

Anda akan melihat semua direktori simbolis memiliki lizin saat mengemis bendera izin. dan jika Anda mengambil grep dengan ^lAnda hanya bisa daftar file simbolik atau direktori:

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$ 

direktori driver dan subsistem adalah tautan simbolis ke direktori lain di sini.

αғsнιη
sumber
1
Spesifikasi minor di sini ... karakter pertama dari string izin tidak benar-benar izin. Ini jenis file. Seperti yang Anda nyatakan lberarti itu adalah tautan simbolis.
conner.xyz
5

grep adalah temanmu:

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

Ini akan daftar baris yang dimulai dengan "l" yang mewakili Link di kolom perms di tempat lpenggunaan duntuk direktori dan -file

Kalibur
sumber
3

POSIXly:

find ! -name . -prune -type l
cuonglm
sumber
1

Untuk melihat tautan simbolik dalam direktori:

  1. Buka terminal dan pindah ke direktori itu.

  2. Ketikkan perintah:

    ls -la
    

    Ini akan membuat daftar panjang semua file dalam direktori bahkan jika mereka disembunyikan.

  3. File yang memulai ladalah file tautan simbolis Anda.

sandeep srivastav vaddiparthy
sumber
1
-1: Jawaban KasiyA sudah mencakup ini.
muru
1

Ini mengembalikan semua item yang terhubung secara simbolis (baik dir & fns) dalam direktori:

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

Namun, untuk membedakan antara jenis barang yang terhubung secara simbolis aktual:

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

Hanya mengembalikan item nama file yang ditautkan secara simbolis. Dan,

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

Hanya mengembalikan item yang terhubung secara simbolis secara simbolis.

odoncaoa
sumber
0

Ketik ls -lai, ini akan mencantumkan semua file dan subdirektori dengan nomor inode yang sesuai. Anda tahu file dengan nomor inode yang sama adalah tautan (keras atau lunak) dan solusi ini juga berfungsi untuk tautan simbolik.

saptarshi nag
sumber
ls -laitidak tidak menampilkan nomor inode yang sama untuk file dan link simbolik. Tidak seperti tautan keras, tautan simbolik memiliki entri inode tersendiri. Ini seperti apa.
Eliah Kagan
0

Dapat dilakukan dengan python juga:

$ 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

Contoh dijalankan:

$ 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

Ini dapat diperluas untuk menjadi rekursif melalui os.walkfungsi, tetapi cukup untuk menggunakan pembuatan daftar sederhana untuk daftar tautan dalam satu direktori seperti yang saya tunjukkan di atas.

Sergiy Kolodyazhnyy
sumber