我需要在Python中处理某个程序的输出。该程序的输出包含几个指向自己的符号链接,这可能很难处理。
我想从文件列表中检测哪些符号链接指向自己,以便我可以删除它们。
答案 0 :(得分:0)
创建一个列表并将其保存到有趣文件的路径中。 如果您不了解它们,可以在运行程序之前和之后比较特定位置的文件列表。 您可以在循环中读取该列表中的文件,并检查其中是否包含列表中的路径。 阅读符号链接可能会出现问题,因为它们包含了内容。有一个os.readlink()函数可以读取自己的符号链接。符号链接本身包含提交它的路径。
答案 1 :(得分:0)
您可以使用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($11, a, "/"); if (a[n] == $13) { print $11 } }'
./subdir/testlink2
./testlink
我在这里使用了一些位置参数,但它们应该不难理解。
答案 2 :(得分:0)
这似乎可以正确检测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)