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