2009-09-11 9 views
28

Zasadniczo chcę wykonać następujące czynności:Pokaż tylko pliki i foldery, które są symbolicznego łącza w tcsh lub bash

ls -l[+someflags] 

(lub w inny sposób), które będą wyświetlane tylko pliki, które są linki symboliczne

więc wyjście będzie wyglądać

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

itp

Na przykład

aby wyświetlić tylko katalogi Mam alias:

alias lsd 'ls -l | grep ^d' 

Zastanawiam się, jak wyświetlić tylko ukryte pliki lub katalogi tylko ukryte?

mam następujące rozwiązanie, jednak nie wyświetla dane wyjściowe w kolorze :(

ls -ltra | grep '\->' 

Odpowiedz

51

znaleźć wszystkie linki symboliczne w katalogu:

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

dla notowań ukryty pliki:

ls -ald .* 
+0

znajdź/usr/bin -type l -print | xargs ls -l nie drukuje w kolorze. kiedy robię ls -l to pokazuje kolory tak jak mam alias ls 'ls --color = auto' – vehomzzz

+0

Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić. – ChristopheD

+3

Jest mały problem. Jeśli nie ma dowiązań symbolicznych w katalogu/usr/bin, comamnd równa się ls -l, oznacza wyświetlanie katalogu bieżącego bez filtra. –

12

tylko dla "ukrytych" foldery - teczki kropka, spróbuj:

ls -l .** 

Tak, obie gwiazdki są konieczne, w przeciwnym razie również dostaniesz. i ... w wynikach.

Dla dowiązania, dobrze, spróbuj program Symlinks:

symlinks -v . 

(pokazuje wszystkie dowiązania pod bieżącym katalogu)

+1

W jakiej powłoce rozszerzenie '. **' wyklucza '.' i' ..'? W bashu jest to odpowiednik '. *' I zawiera '.' i' ..'. W zsh, oba '. *' I '. **' * wykluczają * '.' i' ..'. –

+0

"Symlinks -v" działało idealnie dla mnie, niemniej jednak musiałem określić katalog, nie działa on niejawnie w bieżącym katalogu, trzeba to określić. – m4l490n

5

byłaś prawie tam rozwiązania grep; skupmy się na ponownym uzyskaniu KOLORU.

Spróbuj tego:

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

Sprytny. Musiałem uciec od dash w grep oświadczeniu: grep '\ ->' –

+0

@JesseFisher: Lub 'grep -e '->'' –

+0

Awansuj na kolor, ale ja skłaniam się ku ls & grep Johna Shireya. – BuvinJ

3

Spróbuj typ pliku flagę i pozbyć się dołączanie @

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

Dla (t) csh:

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

(to po prostu pbr's answer, ale z łącznikiem zmienionym.)

Mac OSX

na OSX, ls działa inaczej, więc dodać do swojego pliku ~/.cshrc:

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

a następnie zadzwonić:

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

Dla bash:
Zapewnia to dobre wyjście.

 
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 

Działa to dobrze dla mnie jednak jeśli będzie poszukiwanie/root filesystem trzeba pominąć directory Proc

7

aby wyświetlić tylko dowiązania i co oni odwołują się do:

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

aby ograniczyć do właśnie tego DIR

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

Przykâadowa (po ln -s/usr/bin moo):

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

pokazuje tylko dowiązania (plików i katalogów). Nie wiem jednak, jak je ubarwić.

ls -lad .* 

pokazuje tylko ukryte pliki/katalogi

ls -l | grep drw 

tylko pokazuje katalogów.

0

Zastosowanie: foo $ ścieżka

Używa bieżącą ścieżkę jeśli Nieokreślona.

#!/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

Poprawa trochę zaakceptowanej odpowiedzi udzielonej przez @ChristopheD (komentarz coudnt na zaakceptowanej odpowiedzi ponieważ nie mam wystarczająco dużo reputacji)

używam aliasu

findsymlinks <path> <depth> 

gdzie alias to

alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto"