วิธีแสดงรายการลิงก์สัญลักษณ์ทั้งหมดในไดเรกทอรี


145

ฉันมีลิงค์สัญลักษณ์ใน/var/www/ไดเรกทอรีของฉันซึ่งเชื่อมโยงไปยัง WordPress เมื่อฉันรันคำสั่งls -laจาก/var/www/ไดเรกทอรีลิงก์ไปยัง WordPress จะไม่ปรากฏขึ้น มีวิธีแสดงรายการลิงก์สัญลักษณ์ทั้งหมดที่อยู่ในไดเรกทอรีหรือไม่?


คำตอบ:


80

คุณสามารถใช้grepกับlsคำสั่งเพื่อแสดงลิงก์สัญลักษณ์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบัน

นี่จะแสดงรายการลิงก์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบัน

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

5
มันจะกลับมาเป็นบวกเท็จถ้าคุณมีไฟล์ที่มี " ->" ลองแบบง่ายๆtouch "foo->"
Sylvain Pineau

7
โปรดอย่าคัดลอกและวางเนื้อหาของคำตอบอื่นไปยังคำตอบของคุณเอง -1
αғsнιη

3
ทำไมไม่grepไอเอ็นจีด้วย^l?
Eliran Malka

3
ตามปกติคำตอบที่ดีที่สุดคือคำตอบที่มี +
FractalSpace สูงสุด

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

283

การแยกlsเป็นความคิดที่ไม่ดี ® , ต้องการความเรียบง่ายfindในกรณีนี้:

find . -type l -ls

หากต้องการประมวลผลไดเรกทอรีปัจจุบันเท่านั้น:

find . -maxdepth 1 -type l -ls

เครดิต: ฉันจะทำให้เชลล์รู้จักชื่อไฟล์ที่ส่งคืนโดยคำสั่ง `ls -A` ได้อย่างไรและชื่อเหล่านี้มีช่องว่าง


find: Unknown argument to -type: 1
ahnbizcad

15
@ahnbizcad: มันไม่ใช่1(หนึ่ง) แต่l(ลิงก์)
Sylvain Pineau

3
คำตอบที่ดี! ฉันปรับฉันให้ไม่ลงเส้นทางไดเรกทอรีเช่นนี้: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null ขอบคุณ!
bgs

3
เพียงไดเรกทอรีปัจจุบัน (เช่นไม่ recursive ) -maxdepth 1เพิ่ม
Joshua Pinter

1
@ cig0 คุณไม่จำเป็นต้องใช้awkคุณอาจต้องการเพียงแค่นี้:find . -maxdepth 1 -type l | sort -n
sobi3ch

10

ls -laคำสั่งแสดงไฟล์และโฟลเดอร์ทั้งหมดและไดเรกทอรีที่เชื่อมโยงยังเป็นสัญลักษณ์ถ้าคำสั่งนี้จะไม่แสดงไดเรกทอรีสัญลักษณ์ใด ๆ ก็หมายความว่าคุณไม่ได้มีการเชื่อมโยงสัญลักษณ์เพื่อWordPress

เห็นผลการทำงาน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

คุณจะเห็นไดเรกทอรีสัญลักษณ์ทั้งหมดได้lรับอนุญาตที่การขออนุญาตตั้งค่าสถานะ และหากคุณใช้ grep ด้วย^lคุณสามารถแสดงรายการไฟล์หรือไดเร็กทอรีสัญลักษณ์ได้เท่านั้น:

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$ 

ไดเร็กทอรีไดรเวอร์และระบบย่อยเป็นลิงก์สัญลักษณ์ไปยังไดเร็กทอรีอื่นที่นี่


1
ข้อมูลจำเพาะรองลงมาที่นี่ ... อักขระตัวแรกของสตริงการอนุญาตไม่ใช่สิทธิ์จริง ๆ มันเป็นประเภทไฟล์ ตามที่คุณระบุไว้lหมายความว่าเป็นลิงก์สัญลักษณ์
conner.xyz

5

grep เป็นเพื่อนของคุณ:

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

จะแสดงรายการบรรทัดที่ขึ้นต้นด้วย "l" ซึ่งแสดงถึงลิงค์ในคอลัมน์ perms แทนการlใช้งานdสำหรับไดเรกทอรีและ-ไฟล์



1

วิธีดูลิงก์สัญลักษณ์ในไดเรกทอรี:

  1. เปิดเทอร์มินัลแล้วย้ายไปยังไดเรกทอรีนั้น

  2. พิมพ์คำสั่ง:

    ls -la
    

    รายการนี้จะยาวไฟล์ทั้งหมดในไดเรกทอรีแม้ว่าพวกเขาจะถูกซ่อนไว้

  3. ไฟล์ที่ขึ้นต้นด้วยlคือไฟล์ลิงค์สัญลักษณ์ของคุณ


1
-1: คำตอบของ KasiyAครอบคลุมเรื่องนี้ไปแล้ว
muru

1

สิ่งนี้จะส่งคืนไอเท็มที่ลิงก์แบบสัญลักษณ์ทั้งหมด (ทั้ง dirs & fns) ในไดเร็กทอรี:

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

อย่างไรก็ตามเพื่อแยกความแตกต่างระหว่างประเภทรายการที่เชื่อมโยงเชิงสัญลักษณ์:

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

ส่งคืนรายการชื่อไฟล์ที่เชื่อมโยงเชิงสัญลักษณ์เท่านั้น และ,

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

ส่งคืนรายการ dirname ที่เชื่อมโยงเชิงสัญลักษณ์เท่านั้น


0

พิมพ์ls -laiมันจะแสดงรายการไฟล์และไดเรกทอรีย่อยทั้งหมดที่มีหมายเลขไอโหนดที่สอดคล้องกันคุณรู้ว่าไฟล์ที่มีหมายเลขไอโหนดเดียวกันคือลิงค์ (ฮาร์ดหรือซอฟต์) และโซลูชันนี้ใช้งานได้กับลิงก์สัญลักษณ์


ls -laiไม่ได้แสดงจำนวน inode เดียวกันสำหรับไฟล์และการเชื่อมโยงสัญลักษณ์ของ ลิงก์สัญลักษณ์มีรายการไอโหนดแยกต่างหาก นี่คือสิ่งที่ดูเหมือน
Eliah Kagan

0

สามารถทำได้ด้วย python เช่นกัน:

$ 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

วิ่งตัวอย่าง:

$ 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

สิ่งนี้สามารถขยายให้เรียกซ้ำได้ผ่านos.walkฟังก์ชั่น แต่ก็เพียงพอที่จะใช้การสร้างรายการอย่างง่ายสำหรับการเชื่อมโยงรายชื่อในไดเรกทอรีเดียวตามที่ฉันแสดงไว้ด้านบน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.