2009-09-11 25 views
28

Về cơ bản tôi muốn làm như sau:chỉ hiển thị các tập tin và thư mục mà là liên kết tượng trưng trong tcsh hoặc bash

ls -l[+someflags] 

(hoặc bằng một số phương tiện khác) sẽ chỉ hiển thị các file có liên kết tượng trưng

do đó sản lượng sẽ trông

-rw-r--r-- 1 username grp size date-time filename -> somedir 
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf 

, vv

Ví dụ,

để chỉ hiển thị các thư mục Tôi có một bí danh:

alias lsd 'ls -l | grep ^d' 

Tôi tự hỏi làm thế nào để chỉ hiển thị các tập tin ẩn thư mục hoặc chỉ ẩn?

tôi có giải pháp sau đây, tuy nhiên nó không hiển thị đầu ra trong màu :(

ls -ltra | grep '\->' 

Trả lời

51

Tìm tất cả các liên kết tượng trưng trong một thư mục:

ls -l `find /usr/bin -maxdepth 1 -type l -print` 

Đối với việc niêm yết của ẩn tệp:

ls -ald .* 
+0

tìm/usr/bin -type l -print | xargs ls -l không in màu. khi tôi làm ls -l nó hiển thị màu sắc như tôi có bí danh ls 'ls --color = auto' – vehomzzz

+0

Tôi cập nhật câu trả lời của tôi để phản ánh điều này. – ChristopheD

+3

Có một vấn đề nhỏ. Nếu không có symlink trong/usr/bin, comamnd bằng ls -l, có nghĩa là hiển thị thư mục hiện tại mà không có bộ lọc. –

12

Chỉ đối với thư mục "ẩn" - thư mục dấu chấm, hãy thử:

ls -l .** 

Có, hai dấu hoa thị là cần thiết, nếu không bạn cũng sẽ nhận được. và .. trong kết quả.

Đối với liên kết tượng trưng, ​​tốt, hãy thử các chương trình liên kết tượng trưng:

symlinks -v . 

(cho thấy tất cả liên kết tượng trưng dưới thư mục hiện hành)

+1

Trong phần mở rộng của '. **' loại trừ '.' và' ..' là gì? Trong bash, nó tương đương với '. *', Và nó bao gồm '.' và' ..'. Trong zsh, cả '. *' Và '. **' * loại trừ * '.' và' ..'. –

+0

"symlinks -v" làm việc hoàn hảo cho tôi, tuy nhiên, tôi phải chỉ định thư mục, nó không hoạt động ngầm trong thư mục hiện tại, bạn phải xác định nó. – m4l490n

5

Bạn gần như có giải pháp với grep của bạn; chúng ta hãy tập trung vào việc giúp bạn COLOR một lần nữa.

Hãy thử điều này:

 
ls --color=always -ltra | grep '->' 
+1

Thông minh. Tôi cần phải thoát khỏi dấu gạch ngang trong câu lệnh grep: grep '\ ->' –

+0

@JesseFisher: Hoặc 'grep -e '->'' –

+0

Upvote cho màu sắc, nhưng tôi nghiêng về phía John Shirey ls & grep ... – BuvinJ

3

Hãy thử loại tập tin cờ và thoát khỏi các phụ thêm @

ls -F /home/usr/foo | grep "@" | sed 's/@//' 
1

Đối với (t) csh:

ls --color=always -ltra | grep '\->' 

(Đây là chỉ đơn giản là pbr's answer nhưng với dấu gạch nối thoát.)

Mac OSX

Ngày OSX, ls hoạt động khác nhau, vì vậy thêm video này vào ~/.cshrc tập tin của bạn:

setenv CLICOLOR_FORCE 1 # (equivalent of Linux --color=always) 

Và sau đó gọi:

ls -G -ltra | grep '\->' # (-G is equivalent of ls --color) 
1

Đối với bash:
Điều này cung cấp một đầu ra tốt đẹp.

 
sl=`find -L /path/to/target -xtype l`; for links in $sl; do ls --color=always -ltra $links; done | sed 's/^/ /' 
2
echo > linklist.found && $(for i in `find /path/to/dir/ -type l`; do echo `ls -d --color=always $i` `echo " -> "` $(ls -d --color=always `readlink -f $i`) >> linklist.found; echo >> linklist.found; done;) && cat linklist.found | more 

này hoạt động tốt đối với tôi tuy nhiên nếu bạn sẽ được tìm kiếm/gốc hệ thống tập tin, bạn sẽ cần phải bỏ qua các thư mục proc

7

Để hiển thị JUST các liên kết tượng trưng và những gì họ liên kết với:

find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \; 

để hạn chế đến JUST NÀY DIR

find -P . -maxdepth 1 -type l -exec echo -n "{} -> " \; -exec readlink {} \; 

Ví dụ đầu ra (sau khi ln -s/usr/bin moo):

./moo -> /usr/bin 
8
ls -l | grep lrw 

chỉ hiển thị liên kết tượng trưng (tập tin và thư mục). Tuy nhiên, không chắc chắn làm thế nào để có được chúng đầy màu sắc.

ls -lad .* 

chỉ hiển thị ẩn các tập tin/thư mục

ls -l | grep drw 

chỉ hiển thị các thư mục.

0

Cách sử dụng: foo $ đường dẫn

Sử dụng đường dẫn hiện tại nếu không có chỉ định nào.

#!/bin/bash 

case "$1" in 

    -r) 
    find $2 -type l -print | while IFS= read line ; do ls -l --color=always "$line"; done 
    ;; 

    --help) 
    echo 'Usage: foo [-r] [$PATH]' 
    echo  
    echo '-r Recursive' 
    ;; 


    *) 
    ls --color=always -ltra $1 | grep '\->' 
esac 
4

Cải thiện một chút về câu trả lời được chấp nhận do @ChristopheD (coudnt bình luận về câu trả lời chấp nhận vì tôi không có đủ uy tín)

tôi sử dụng một bí danh

findsymlinks <path> <depth> 

nơi bí danh là

alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto" 
Các vấn đề liên quan