在当前目录中列出符号链接?


8

这个问题涉及在当前目录中查找目录。解决方案基本上是:

ls -d */

很好,但是我如何轻松列出符号链接?我是否必须使用类似

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

还是有更简单的方法?请问可以使用ls吗?


在我的Ubuntu系统上,快速浏览一下它的man find显示,它-d-depth(与FreeBSD,NetBSD,MacOS X和OpenBSD的兼容性)的同义词。它与-maxdepth。。。-depth 在目录本身之前处理每个目录的内容
Peter.O 2011年

Answers:


9

在zsh中(N在括号内添加以名称开头的符号链接.):

echo *(@)

对于大多数find实现:

find -maxdepth 1 -type l

符合POSIX:

find . -type d \! -name . -prune -o -type l -print

或使用shell循环:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
对于该-prune选项,您需要使用find topdir ! -name topdir -prune; 否则,起始目录也将被忽略。
Arcege”,2011年


3

您应该使用-type而不是-xtype

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

缺省值为-P,因此-xtype选项将尝试确定结果文件,而不是symlink本身。实际上,我得到了一些积极的结果,这似乎是一个错误。-P -xtype l如果结果本身是符号链接,则应该返回true(在符号链接上)。

也可以使用:ls -FA | sed -ne 's/@//p'仅显示符号链接。


不错的ls解决方案
frogstarr78 2011年

2
sed -ne 's/@//p'(甚至sed -ne 's/@$//p')不是安全的测试,因为第一个版本@ls输出中的任何地方出现时都会给出假肯定,而第二个版本在文件名实际上以@
Peter.O

1

要仅查找当前目录内的符号链接文件:

find . -type l -printf '%p -> %l\n'

这将递归列出所有符号链接文件。此外,它还显示了它指向的实际文件。

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.