在仍然遵循目录符号链接的同时,如何使用长格式(-l)ls?


27

我注意到,ls -l这不仅会更改输出的格式,还会更改目录符号链接的处理方式:

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

我想详细了解其中的内容/rmn,而不是有关/rmn符号链接的信息。

我可以想到的一种解决方法是创建一个执行以下操作的shell函数:

cd /rmn
ls -l
cd -

但这似乎太过分了,尤其是因为它弄乱了的下一个用法cd -。有没有更好的办法?

(我使用的是CentOS 2.6.9)


我也注意到了这一点,然后谷歌搜索是否有人也注意到了。那就是我来这里的方式。:)
Yevgeniy Afanasyev

Answers:


27

查看您的ls是否具有以下选项:

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

如果这些方法没有帮助,您可以执行以下操作,使宏工作而不会混乱cd -

(cd /rmn ; ls -l)

在子外壳中运行。


它确实有-H,并且达到了目的。谢谢!
RomanSt 2012年

4
我真的希望那--dereference-command-line-symlink-to-dir是一个简短的形式。
wchargin

14

我不太明白为什么对这个简单问题的思考必须如此复杂-但也许我只是以错误的方式得到了这个问题。无论如何:当我需要类似的功能时,我使用了:

ls -lL

在我看来,这就是窍门。从ls手册页:

-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself

例如,我为我提供/media/stick了访问USB记忆棒上的数据的快捷方式。ls -l /media/stick将显示实际的链接,同时ls -lL /media/stick将显示USB记忆棒上的内容

在对-H和的内部工作方式之间的区别进行了更深入的研究之后-L,我终于在Shallow Thoughts博客上找到了一篇有关此问题的出色文章(甚至还提供了一些简洁的shell脚本技巧供您使用!)

这指出了两个选项之间的细微差异(比原始手册要好得多!),如下所示:

  • -H -仅取消引用命令行上明确提到的那些链接
  • -L-即使在命令行上提及链接也要取消引用链接

(当将两者用于简单的日常任务时,总体上输出应该没有差异。)

此外:如果您更喜欢记住长格式(--option),则记住它的时间可能--dereference比过长的怪物要麻烦的多--dereference-command-line-symlink-to-dir


5
ls -l /rmn/

会做或者

ls -l /rmn/.

但是,使用和不使用时,其行为不应有所不同-l。你有别名ls吗?


3
ls旗帜很疯狂。 -l和一样将-H默认设置为off -F。请参阅coreutils-列出了哪些文件
Mikel 2012年

@Mikel看来您完全正确。是的,这很疯狂。(而且,我没有ls的别名,尝试将其转义,但结果相同)
RomanSt 2012年

实际上,它甚至由POSIX指定。我ls='ls -F'实际上是一个别名。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.