Отображать только файлы и папки, которые являются символическими ссылками в tcsh или bash - PullRequest
32 голосов
/ 11 сентября 2009

В основном я хочу сделать следующее:

ls -l[+someflags]

(или каким-либо другим способом), который будет отображать только файлы, которые являются символическими ссылками

так что результат будет выглядеть

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

и т.д..

Например,

для отображения только каталогов У меня есть псевдоним:

alias  lsd  'ls -l | grep ^d'

Интересно, как отобразить только скрытые файлы или только скрытые каталоги?

У меня есть следующее решение, однако оно не отображает вывод в цвете: (

ls -ltra | grep '\->'

Ответы [ 11 ]

57 голосов
/ 11 сентября 2009

Найти все символические ссылки в каталоге:

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

Для просмотра скрытых файлов:

ls -ald .*
13 голосов
/ 17 июля 2014
ls -l | grep lrw 

показывает только символические ссылки (файлы и каталоги). Не уверен, как сделать их красочными.

ls -lad .* 

показывает только скрытые файлы / каталоги

ls -l | grep drw

показывает только каталоги.

12 голосов
/ 11 сентября 2009

Только для «скрытых» папок - точечные папки, попробуйте:

ls -l .**

Да, две звездочки необходимы, иначе вы тоже получите. и .. в результатах.

Для символических ссылок, попробуйте программу символических ссылок:

symlinks -v .

(показывает все символические ссылки в текущем каталоге)

9 голосов
/ 19 мая 2014

Чтобы отобразить ПРОСТО символические ссылки и на что они ссылаются:

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

Ограничить ТОЛЬКО ЭТОМ DIR

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

Пример вывода (после ln -s / usr / bin moo):

./moo -> /usr/bin
6 голосов
/ 26 сентября 2009

Вы были почти там с вашим решением grep; давайте сосредоточимся на том, чтобы снова получить ваш ЦВЕТ.

Попробуйте это:

ls --color=always -ltra | grep '->'
5 голосов
/ 21 января 2015

Немного улучшил принятый ответ, данный @ChristopheD (см. Комментарий к принятому ответу, так как у меня недостаточно репутации)

Я использую псевдоним

findsymlinks <path> <depth> 

где псевдоним

alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto" 
3 голосов
/ 14 марта 2012

Попробуйте флаг типа файла и избавьтесь от добавляющегося @

ls -F /home/usr/foo | grep "@" | sed 's/@//'
2 голосов
/ 15 декабря 2013

Для (т) ЦШ :

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

(Это просто ответ pbr , но с дефисом.)

Mac OSX

В OSX ls работает по-другому, поэтому добавьте это в файл ~/.cshrc:

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

А затем позвоните:

ls -G -ltra | grep '\->'  # (-G is equivalent of ls --color)
1 голос
/ 10 февраля 2014
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

Это хорошо работает для меня, однако, если вы будете искать / в корневом каталоге файловой системы, вам нужно будет пропустить каталог proc

1 голос
/ 31 января 2014

Для Баш:
Это обеспечивает хороший вывод.

sl=`find -L /path/to/target -xtype l`; for links in $sl; do ls --color=always -ltra $links; done | sed 's/^/    /'
...