我最近升级了我的电脑,除了新的操作系统之外,我还有了一个新的用户名。因此,我的参考资料目录中充满了不再有效的链接,但如果我可以在链接中将我的旧用户名换成新用户名,它们就会起作用。
例如:该文件/home/CurUserName/Reference/C/Car/Insurance
指向/home/OldUserName/Reference/I/Insurance
我发现这个答案它解释了如何查找目录中的每个链接,并且我在其他地方找到了有关如何手动更新单个链接的在线说明,但我对 Bash 的经验不足,无法弄清楚如何(或是否)一次性更改所有链接。这可能吗?如果可以,怎么做?
答案1
这个问题可能应该unix/bash,但你可以这样做:
#!/bin/bash
# renl: Rename links
# Make sure we have at least two arguments, the source and destination
if [ $# -lt 2 ];then
echo Usage: renl SOURCE DEST [TARGET]
exit 1
else
export SOURCE="$1"
export DEST="$2"
fi
# Setup the target directory argument
if [ -n "$3" ]; then
export TARGET="$3"
else
export TARGET="."
fi
# Output the input values
echo "Source: $SOURCE"
echo "Destin: $DEST"
echo "Target: $TARGET"
echo
# Loop thru all links in the target directory
links=$(find $TARGET -maxdepth 1 -type l)
for f in $links; do
tolink=$(readlink "$f")
if [[ $tolink == *"${SOURCE}"* ]]; then
newlink=${tolink/$SOURCE/$DEST}
echo "$f --> $tolink ==> $newlink"
# Uncoment the next line to actaully do the rename
# rm "$f" && ln -s "$newlink" "$f"
else
echo "$f --> $tolink"
fi
done;
unset SOURCE
unset DEST
unset TARGET
请注意,如果您不想要 shell 扩展,则必须输入带有单引号的 TARGET 通配符。