我经常移动的目录树到其他地点或他们的tar文件拷贝到其他机器,我想必须检查是否在目录树中的任何符号链接的方法一到驻地以外的点一个,因为这些将在移动破碎/复制目录。
我经常移动的目录树到其他地点或他们的tar文件拷贝到其他机器,我想必须检查是否在目录树中的任何符号链接的方法一到驻地以外的点一个,因为这些将在移动破碎/复制目录。
Answers:
我必须调整@bahamat给出的答案以使其起作用。
提供的版本仅报告了有问题的绝对位置,但没有报告指向该位置的符号链接。
这是我使用的(我敢肯定它可以改善):
for f in $(find . -type l ); do echo -n $(realpath $f) && echo -n "|" && echo $f ; done | grep -v "^$(pwd)" | cut -d \| -f 2
for f in $(find . -type l); do echo $(realpath -m -q $f) '<-' $f; done | grep-v "^$(pwd)"
最著名的是-m
,-q
它过滤掉了损坏的和非外部的链接)
GNU coreutilsprovedes realpath
,它可以解决符号链接。这样,您可以将每个符号链接的目标与当前工作目录进行比较,如下所示:
#!/bin/bash
find . | while read filename
do
if realpath $filename | grep -E "^$PWD" > /dev/null
then
echo 'this file is safe'
else
echo 'this file links externally'
fi
done
-type l
,没有-r
选项read
,IFS不消毒的read
,$filename
没有报价,$PWD
为正则表达式处理,用换行符路径不入账,/foobar
将匹配的$PWD
“/ foo”的==