我的/var/www/目录中有一个链接到WordPress的符号链接。当我从ls -la目录运行命令/var/www/时,没有显示到WordPress的链接。有没有办法列出目录中的所有符号链接?

评论

如何查找和列出为特定文件创建的所有符号链接的可能重复项?

#1 楼

您可以将grepls命令一起使用以列出当前目录中存在的所有符号链接。

这将列出当前目录中存在的所有链接。

ls -la /var/www/ | grep "\->"


评论


如果您的文件包含“->”,它将返回假阳性。尝试简单的触摸“ foo->”

–西尔万·皮诺(Sylvain Pineau)
2014年9月9日18:32

为什么不与^ l格格不入?

–伊莱兰·马尔卡(Eliran Malka)
17年1月18日在12:13

与往常一样,最好的答案是+

– FractalSpace
17年12月10日在19:19

真好! →.bash_alias:别名listlinks ='ls -l --color | grep“ \->”'8-)

–弗兰克·诺克(Frank Nocke)
18年4月11日在3:08

将-R传递给ls以获得递归列表。

– Itachi
18年4月27日在7:10

#2 楼

解析ls是一个BadIdea®,在这种情况下,首选简单的find

find . -type l -ls


仅处理当前目录:

find . -maxdepth 1 -type l -ls


信用:如何使Shell识别由`ls -A`命令返回的文件名,并且这些名称包含空格?

评论


@ahnbizcad:不是1(一个),而是l(链接)

–西尔万·皮诺(Sylvain Pineau)
15年5月28日在17:51

好答案!我调整了我的位置,使其不会下降到这样的目录路径:find / <您的目录> -maxdepth 1 -type l -ls 2> / dev / null谢谢!

–bgs
16-2-4在18:47



仅针对当前目录(即非递归目录)添加-maxdepth 1。

–约书亚·品特(Joshua Pinter)
16年4月8日在14:32

@ cig0您不需要使用awk,您可能只需要这样:find。 -maxdepth 1型l |排序-n

– sobi3ch
19年6月28日在15:43

来自人的@GabrielStaples发现:-ls True;在标准输出上以ls -dils格式列出当前文件。在/ etc中查看./os-release-> ../usr/lib/os-release有用,而不仅仅是./os-release

–西尔万·皮诺(Sylvain Pineau)
20-2-13在9:11

#3 楼

grep是您的朋友:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files


这将列出以“ l”开头的行,这些行表示perms列中的链接,而不是l,目录使用d,文件使用-

评论


只是不要以编程方式对此方法做任何事情,因为恶意文件名最终可能会注入shell代码。为安全起见,应将find命令与-exec一起使用,并且如果要通过管道传递到xargs,则将find的空字符分隔符输出标志与xargs的空字符分隔符输入标志结合使用。

– ErikE
19/12/19在15:24

#4 楼

POSIXly:

find ! -name . -prune -type l


评论


你能解释一下!在这种情况下?

– Mtl Dev
20年1月14日在15:42

@MtlDev!否定条件匹配,这里! -名称 。表示匹配当前目录以外的所有内容。

–cuonglm
20 Jan 15'4:49

#5 楼

这将返回目录中的所有符号链接项目(包括dirs和fns):

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"


但是,为了区分实际的符号链接项目类型:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1


仅返回符号链接的文件名项目。并且,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1


仅返回符号链接的目录名项目。

#6 楼

要查看目录中的符号链接:


打开终端并移至该目录。

键入命令:

ls -la


即使在隐藏的目录下,也应列出所有文件。

l开头的文件是您的符号链接文件。


评论


-1:KasiyA的答案已经涵盖了这一点。

–muru
2014年9月10日下午5:45

这也列出了非香料。更好的解决方案可以回答已经发布的问题。

– RichieHH
20-10-14在5:09

#7 楼

键入ls -lai,它将列出所有具有相应inode编号的文件和子目录。您知道具有相同inode编号的文件是链接(硬链接或软链接),并且该解决方案也适用于符号链接。

评论


ls -lai对于文件及其符号链接没有显示相同的inode编号。与硬链接不同,符号链接具有自己的独立inode条目。这就是它的样子。

– Eliah Kagan
2014-09-12 6:19



#8 楼

也可以使用python完成:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir


样本运行:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime


这可以扩展为可以通过os.walk函数进行递归,但是使用简单的列表生成就足以在单个目录中列出链接,如上所示。

评论


基本的shell命令已经可以执行此操作时,可以避免复杂化。

– RichieHH
20-10-14在5:10