ฉันมีลิงค์สัญลักษณ์ใน/var/www/
ไดเรกทอรีของฉันซึ่งเชื่อมโยงไปยัง WordPress เมื่อฉันรันคำสั่งls -la
จาก/var/www/
ไดเรกทอรีลิงก์ไปยัง WordPress จะไม่ปรากฏขึ้น มีวิธีแสดงรายการลิงก์สัญลักษณ์ทั้งหมดที่อยู่ในไดเรกทอรีหรือไม่?
ฉันมีลิงค์สัญลักษณ์ใน/var/www/
ไดเรกทอรีของฉันซึ่งเชื่อมโยงไปยัง WordPress เมื่อฉันรันคำสั่งls -la
จาก/var/www/
ไดเรกทอรีลิงก์ไปยัง WordPress จะไม่ปรากฏขึ้น มีวิธีแสดงรายการลิงก์สัญลักษณ์ทั้งหมดที่อยู่ในไดเรกทอรีหรือไม่?
คำตอบ:
คุณสามารถใช้grep
กับls
คำสั่งเพื่อแสดงลิงก์สัญลักษณ์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบัน
นี่จะแสดงรายการลิงก์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบัน
ls -la /var/www/ | grep "\->"
->
" ลองแบบง่ายๆtouch "foo->"
grep
ไอเอ็นจีด้วย^l
?
alias listlinks='ls -l --color | grep "\->"'
8-)
การแยกls
เป็นความคิดที่ไม่ดี ® , ต้องการความเรียบง่ายfind
ในกรณีนี้:
find . -type l -ls
หากต้องการประมวลผลไดเรกทอรีปัจจุบันเท่านั้น:
find . -maxdepth 1 -type l -ls
เครดิต: ฉันจะทำให้เชลล์รู้จักชื่อไฟล์ที่ส่งคืนโดยคำสั่ง `ls -A` ได้อย่างไรและชื่อเหล่านี้มีช่องว่าง
find: Unknown argument to -type: 1
1
(หนึ่ง) แต่l
(ลิงก์)
find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null
ขอบคุณ!
-maxdepth 1
เพิ่ม
awk
คุณอาจต้องการเพียงแค่นี้:find . -maxdepth 1 -type l | sort -n
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$
ไดเร็กทอรีไดรเวอร์และระบบย่อยเป็นลิงก์สัญลักษณ์ไปยังไดเร็กทอรีอื่นที่นี่
l
หมายความว่าเป็นลิงก์สัญลักษณ์
grep
เป็นเพื่อนของคุณ:
ls -lhaF | grep ^l # list links
ls -lhaF | grep ^d # list directories
ls -lhaF | grep ^- # list files
จะแสดงรายการบรรทัดที่ขึ้นต้นด้วย "l" ซึ่งแสดงถึงลิงค์ในคอลัมน์ perms แทนการl
ใช้งานd
สำหรับไดเรกทอรีและ-
ไฟล์
POSIXly:
find ! -name . -prune -type l
วิธีดูลิงก์สัญลักษณ์ในไดเรกทอรี:
เปิดเทอร์มินัลแล้วย้ายไปยังไดเรกทอรีนั้น
พิมพ์คำสั่ง:
ls -la
รายการนี้จะยาวไฟล์ทั้งหมดในไดเรกทอรีแม้ว่าพวกเขาจะถูกซ่อนไว้
ไฟล์ที่ขึ้นต้นด้วยl
คือไฟล์ลิงค์สัญลักษณ์ของคุณ
สิ่งนี้จะส่งคืนไอเท็มที่ลิงก์แบบสัญลักษณ์ทั้งหมด (ทั้ง 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 ที่เชื่อมโยงเชิงสัญลักษณ์เท่านั้น
พิมพ์ls -lai
มันจะแสดงรายการไฟล์และไดเรกทอรีย่อยทั้งหมดที่มีหมายเลขไอโหนดที่สอดคล้องกันคุณรู้ว่าไฟล์ที่มีหมายเลขไอโหนดเดียวกันคือลิงค์ (ฮาร์ดหรือซอฟต์) และโซลูชันนี้ใช้งานได้กับลิงก์สัญลักษณ์
ls -lai
ไม่ได้แสดงจำนวน inode เดียวกันสำหรับไฟล์และการเชื่อมโยงสัญลักษณ์ของ ลิงก์สัญลักษณ์มีรายการไอโหนดแยกต่างหาก นี่คือสิ่งที่ดูเหมือน
สามารถทำได้ด้วย 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
ฟังก์ชั่น แต่ก็เพียงพอที่จะใช้การสร้างรายการอย่างง่ายสำหรับการเชื่อมโยงรายชื่อในไดเรกทอรีเดียวตามที่ฉันแสดงไว้ด้านบน