Liệt kê symlink trong thư mục hiện tại?


8

Câu hỏi này nói về việc tìm các thư mục trong một diretory hiện tại. Giải pháp cơ bản là:

ls -d */

Điều đó thật tuyệt nhưng làm thế nào tôi có thể dễ dàng liệt kê các liên kết tượng trưng? Tôi có phải sử dụng một cái gì đó như

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

Hoặc có một cách dễ dàng hơn? Ls có thể được sử dụng cho việc này?


Trên hệ thống Ubuntu của tôi, hãy xem nhanh các man findchương trình của nó -dlà từ đồng nghĩa với -depth(để tương thích với FreeBSD, NetBSD, MacOS X và OpenBSD.), Tức là. nó không phải là giống như -maxdepth. . . -depth Xử lý nội dung của mỗi thư mục trước chính thư mục đó
Peter.O

Câu trả lời:


9

Trong zsh (thêm Nbên trong dấu ngoặc đơn để bao gồm các liên kết tượng trưng có tên bắt đầu bằng a .):

echo *(@)

Với hầu hết các findtriển khai:

find -maxdepth 1 -type l

Tuân thủ POSIX:

find . -type d \! -name . -prune -o -type l -print

Hoặc với một vòng lặp shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
Đối với -prunetùy chọn, bạn cần sử dụng find topdir ! -name topdir -prune; mặt khác, thư mục bắt đầu cũng bị bỏ qua
Arcege

6

Đây không phải trên máy Mac, nhưng

find . -maxdepth 1 -type l

làm việc cho tôi


3

Bạn nên sử dụng -typevà không -xtype:

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

Mặc định là -P, vì vậy tùy chọn -xtype sẽ cố gắng xác định tệp kết quả, chứ không phải chính liên kết tượng trưng. Trên thực tế, tôi nhận được một số kết quả tích cực, có vẻ như là một lỗi. Các -P -xtype lnên trở thành sự thật (trên một liên kết tượng trưng) khi và chỉ khi các kết quả là chính nó là một liên kết tượng trưng.

Cũng có thể sử dụng: ls -FA | sed -ne 's/@//p'sẽ chỉ hiển thị các liên kết tượng trưng.


giải pháp tốt đẹp
ếchstarr78

2
sed -ne 's/@//p'(và thậm chí sed -ne 's/@$//p') không phải là một thử nghiệm an toàn, vì phiên bản đầu tiên sẽ cho kết quả dương tính giả khi @xảy ra ở bất kỳ đâu trong đầu ra ls và lần thứ hai sẽ trả về một tư thế sai khi tên tệp thực sự kết thúc vào@
Peter.O

1

Để tìm ra chỉ các tệp là liên kết tượng trưng trong thư mục hiện tại:

find . -type l -printf '%p -> %l\n'

Điều này sẽ liệt kê đệ quy tất cả các tệp symlink. Ngoài ra, nó hiển thị các tập tin thực tế mà nó 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.