Làm thế nào để liệt kê tất cả các liên kết tượng trưng trong một thư mục


145

Tôi có một liên kết tượng trưng trong /var/www/thư mục của tôi liên kết đến WordPress. Khi tôi chạy lệnh ls -latừ /var/www/thư mục, liên kết đến WordPress không hiển thị. Có cách nào để liệt kê tất cả các liên kết tượng trưng trong một thư mục không?


Câu trả lời:


80

Bạn có thể sử dụng grepvới lslệnh để liệt kê tất cả các liên kết tượng trưng có trong thư mục hiện tại.

Điều này sẽ liệt kê tất cả các liên kết có trong thư mục hiện tại.

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

5
Nó sẽ trả về dương tính giả nếu bạn có tệp chứa " ->". Hãy thử một cách đơn giảntouch "foo->"
Sylvain Pineau

7
vui lòng không sao chép và dán nội dung của câu trả lời khác vào câu trả lời của riêng bạn. -1
asнι

3
Tại sao không greping với ^l?
Eliran Malka

3
Như thường lệ, câu trả lời tốt nhất là câu trả lời cao nhất +
FractalSpace

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

284

Phân tích cú pháp lslà một ý tưởng tồi ® , thích đơn giản hơn findtrong trường hợp đó:

find . -type l -ls

Để chỉ xử lý thư mục hiện tại:

find . -maxdepth 1 -type l -ls

Tín dụng: Làm cách nào để tạo trình bao để nhận ra tên tệp được trả về bởi lệnh `ls -A` và các tên này chứa khoảng trắng?


find: Unknown argument to -type: 1
ahnbizcad

15
@ahnbizcad: Không phải 1(một) mà là l(liên kết)
Sylvain Pineau

3
Câu trả lời chính xác! Tôi đã điều chỉnh của tôi để không đi xuống đường dẫn thư mục như thế này: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Cảm ơn bạn!
bss

3
Chỉ dành cho thư mục hiện tại (tức là không đệ quy ) thêm -maxdepth 1.
Joshua Pinter

1
@ cig0 u không cần sử dụng awk, có lẽ bạn chỉ muốn điều này:find . -maxdepth 1 -type l | sort -n
sobi3ch

10

các ls -lalệnh hiển thị tất cả các file và thư mục và thư mục liên kết cũng mang tính biểu tượng, nếu lệnh này không hiển thị bất kỳ thư mục biểu tượng nó có nghĩa là bạn không có một liên kết tượng trưng cho WordPress .

xem kết quả của việc chạy 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

Bạn sẽ thấy tất cả các thư mục tượng trưng có lquyền tại cầu xin cờ cấp phép. và nếu bạn có một grep với ^lbạn, bạn chỉ có thể liệt kê các tệp hoặc thư mục tượng trưng:

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$ 

trình điều khiển và thư mục hệ thống con là liên kết tượng trưng đến thư mục khác ở đây.


1
Đặc tả nhỏ ở đây ... ký tự đầu tiên của chuỗi quyền không thực sự là quyền. Đó là loại tập tin. Như bạn đã nói lcó nghĩa là nó là một liên kết tượng trưng.
conner.xyz

5

grep là bạn của bạn:

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

Điều này sẽ liệt kê các dòng bắt đầu bằng "l" đại diện cho các Liên kết trong cột perms thay cho lviệc sử dụng dcho các thư mục và -cho các tệp



1

Để xem các liên kết tượng trưng trong một thư mục:

  1. Mở một thiết bị đầu cuối và di chuyển đến thư mục đó.

  2. Gõ lệnh:

    ls -la
    

    Điều này sẽ liệt kê dài tất cả các tệp trong thư mục ngay cả khi chúng bị ẩn.

  3. Các tập tin bắt đầu với llà tập tin liên kết tượng trưng của bạn.


1
-1: Câu trả lời của KasiyA đã bao gồm điều này.
muru

1

Điều này trả về tất cả các mục được liên kết tượng trưng (cả dir & fns) trong một thư mục:

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

Tuy nhiên, để phân biệt giữa các loại mặt hàng được liên kết tượng trưng thực tế:

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

Chỉ trả về các mục tên tệp được liên kết tượng trưng. Và,

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

Chỉ trả về các mục dirname được liên kết tượng trưng.


0

Loại ls -lai, nó sẽ liệt kê tất cả các tệp và thư mục con với số inode tương ứng. Bạn biết các tệp có cùng số inode là các liên kết (cứng hoặc mềm) và giải pháp này cũng hoạt động cho các liên kết tượng trưng.


ls -laikhông không hiển thị số inode tương tự cho một tập tin và liên kết tượng trưng của nó. Không giống như các liên kết cứng, các liên kết tượng trưng có các mục inode riêng. Đây là những gì nó trông giống như.
Eliah Kagan

0

Cũng có thể được thực hiện với 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

Chạy mẫu:

$ 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

Điều này có thể được mở rộng để đệ quy thông qua os.walkchức năng, nhưng nó đủ để sử dụng việc tạo danh sách đơn giản để liệt kê các liên kết trong một thư mục như tôi đã trình bày ở trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.