仅显示tcsh或bash中符号链接的文件和文件夹

时间:2009-09-11 18:02:18

标签: linux shell csh tcsh

基本上我想做以下事情:

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 个答案:

答案 0 :(得分:57)

查找目录中的所有符号链接:

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

隐藏文件列表:

ls -ald .*

答案 1 :(得分:13)

ls -l | grep lrw 

仅显示符号链接(文件和目录)。但不知道如何让它们变得丰富多彩。

ls -lad .* 

仅显示隐藏文件/目录

ls -l | grep drw

仅显示目录。

答案 2 :(得分:12)

仅限“隐藏”文件夹 - 点文件夹,请尝试:

ls -l .**

是的,这两个星号是必要的,否则你也会得到。和..在结果中。

对于符号链接,请尝试使用符号链接程序:

symlinks -v .

(显示当前目录下的所有符号链接)

答案 3 :(得分:9)

显示符号链接及其链接的内容:

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

限制为JUST THIS

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

示例输出(在ln -s / usr / bin moo之后):

./moo -> /usr/bin

答案 4 :(得分:6)

你几乎在那里用你的grep解决方案;让我们专注于让你再次成为COLOR。

试试这个:

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

答案 5 :(得分:5)

对@ChristopheD给出的答案做了一点改进(由于我没有足够的声誉,因此对已接受的答案进行了评论)

我使用别名

findsymlinks <path> <depth> 

别名是

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

答案 6 :(得分:3)

尝试文件类型标记并删除附加的@

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

答案 7 :(得分:2)

For(t)csh

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

(这只是pbr's answer,但连字符已转义。)

Mac OSX

在OSX上,ls的工作方式不同,因此请将其添加到~/.cshrc文件中:

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

然后致电:

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

答案 8 :(得分: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

这对我有用,但是如果你要搜索/ filesystem root你需要省略proc目录

答案 9 :(得分:1)

对于bash:
这提供了一个很好的输出。

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

答案 10 :(得分:0)

用法:foo $ path

如果未指定,则使用当前路径。

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