列出所有指向自己的符号链接
List all symbolic links to themselves
我需要处理Python中某个程序的输出。该程序的输出包含几个指向自身的符号链接,使用起来可能很痛苦。
我想从文件列表中检测哪些文件是指向自身的符号链接,以便我可以删除它们。
创建一个列表并将感兴趣文件的路径保存到其中。
如果您不知道它们,可以比较 运行 程序前后特定位置的文件列表。
您可以循环读取该列表中的文件,并检查其中是否包含列表中的路径。
读取符号链接可能会出现问题,因为它们包含所指向内容的内部。有一个 os.readlink() 函数可以读取自身的符号链接。符号链接本身包含它指向的文件路径。
您可以使用 find
+ awk
来完成这项工作。
使用find
列出所有符号链接:
$ find . -type l -ls
1197707 0 lrwxrwxrwx 1 user user 9 Mar 2 17:22 ./subdir/testlink2 -> testlink2
1183041 0 lrwxrwxrwx 1 user user 8 Mar 2 17:20 ./testlink -> testlink
如果您只想列出当前目录中的符号链接,请应用 -maxdepth
参数:
$ find . -maxdepth 1 -type l -ls
列出所有符号链接后,使用awk
查找指向自身的符号链接:
$ find . -type l -ls | awk '{ n=split(, a, "/"); if (a[n] == ) { print } }'
./subdir/testlink2
./testlink
这里我使用了一些位置参数,但它们应该不难理解。
这似乎可以正确检测 target_dir
中的递归符号链接:
import os
target_dir = os.getcwd()
all_files = [os.path.realpath(os.path.join(target_dir, f))
for f in os.listdir(target_dir)]
for f in all_files:
if os.path.islink(f) and os.path.realpath(os.readlink(f)) == f:
print('%s is a recursive symlink' % f)
我需要处理Python中某个程序的输出。该程序的输出包含几个指向自身的符号链接,使用起来可能很痛苦。
我想从文件列表中检测哪些文件是指向自身的符号链接,以便我可以删除它们。
创建一个列表并将感兴趣文件的路径保存到其中。 如果您不知道它们,可以比较 运行 程序前后特定位置的文件列表。 您可以循环读取该列表中的文件,并检查其中是否包含列表中的路径。 读取符号链接可能会出现问题,因为它们包含所指向内容的内部。有一个 os.readlink() 函数可以读取自身的符号链接。符号链接本身包含它指向的文件路径。
您可以使用 find
+ awk
来完成这项工作。
使用find
列出所有符号链接:
$ find . -type l -ls
1197707 0 lrwxrwxrwx 1 user user 9 Mar 2 17:22 ./subdir/testlink2 -> testlink2
1183041 0 lrwxrwxrwx 1 user user 8 Mar 2 17:20 ./testlink -> testlink
如果您只想列出当前目录中的符号链接,请应用 -maxdepth
参数:
$ find . -maxdepth 1 -type l -ls
列出所有符号链接后,使用awk
查找指向自身的符号链接:
$ find . -type l -ls | awk '{ n=split(, a, "/"); if (a[n] == ) { print } }'
./subdir/testlink2
./testlink
这里我使用了一些位置参数,但它们应该不难理解。
这似乎可以正确检测 target_dir
中的递归符号链接:
import os
target_dir = os.getcwd()
all_files = [os.path.realpath(os.path.join(target_dir, f))
for f in os.listdir(target_dir)]
for f in all_files:
if os.path.islink(f) and os.path.realpath(os.readlink(f)) == f:
print('%s is a recursive symlink' % f)