如何在仍遵循目录符号链接的情况下使用长格式 (-l) ls?

如何在仍遵循目录符号链接的情况下使用长格式 (-l) ls?

我注意到这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)

答案1

看看你的 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)

它在子外壳中运行。

答案2

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

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访问 U 盘上数据的快捷方式。ls -l /media/stick将显示实际链接,同时ls -lL /media/stick将显示内容在 USB 记忆棒上。

-H经过对和内部运作之间的差异进行了一些更深入的研究后-L,我终于在浅薄的想法博客(甚至还提供一些简洁的 shell 脚本技巧,供您欣赏!)

这指出了细微差别两个选项之间(比原始手册更好!)如下:

  • -H-- 仅取消引用命令行中明确提到的那些链接
  • -L-- 取消引用链接,即使它们是不是在命令行中提到

(当这两个与简单的日常任务,一般来说输出应该没有差异。)

此外:您是否更愿意记住长形式(--option--dereference),它很可能比 的过长怪物更容易记住--dereference-command-line-symlink-to-dir

答案3

ls -l /rmn/

会这样做或者

ls -l /rmn/.

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

相关内容