如何列出目录中的所有符号链接


Answers:


80

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

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

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

5
如果您的文件包含“ ->” ,它将返回假肯定。试试一个简单的touch "foo->"
Sylvain Pineau 2014年

7
请不要将其他答案的内容复制并粘贴到您自己的答案中。-1
αғsнιη

3
为什么不grep^l
伊莱兰·马尔卡

3
与往常一样,最佳答案是+最高的答案
FractalSpace

真好!→.bash_alias:alias listlinks='ls -l --color | grep "\->"'8
Frank Nocke

281

解析ls是一个坏主意 ®find在这种情况下,首选简单方法:

find . -type l -ls

仅处理当前目录:

find . -maxdepth 1 -type l -ls

致谢:如何使外壳识别`ls -A`命令返回的文件名,并且这些名称包含空格?


find: Unknown argument to -type: 1
ahnbizcad

15
@ahnbizcad:不是1(一个)而是l(链接)
Sylvain Pineau

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

3
仅对于当前目录(即非递归)添加-maxdepth 1
Joshua Pinter

1
@ cig0您不需要使用awk,您可能只想要这样:find . -maxdepth 1 -type l | sort -n
sobi3ch

10

ls -la命令显示所有文件和文件夹以及符号链接目录,如果此命令未显示任何符号目录,则意味着您没有到WordPress的符号链接。

查看运行结果ls -la

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

您会看到所有符号目录l在权限标志处都具有权限。如果使用grep,则^l只能列出符号文件或目录:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

驱动程序子系统目录是此处其他目录的符号链接。


1
次要说明...权限字符串的第一个字符实际上不是权限。这是文件类型。正如您所说的,l这是一个符号链接。
conner.xyz

5

grep 是你的朋友:

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

这将列出开始的“L”代表在烫发列链接代替线l使用d的目录和-用于文件




1

这将返回目录中所有符号链接的项目(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

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


0

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


ls -lai显示文件和符号链接相同的inode编号。与硬链接不同,符号链接具有自己的独立inode条目。这就是它的样子。
伊利亚·卡根

0

也可以用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函数将其扩展为递归的,但是使用简单的列表生成就足以在单个目录中列出链接,如我上面所示。

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.