Как обновить сразу несколько ссылок Symboli c - proUbuntu
0 голосов
/ 31 мая 2020

Недавно я обновил свой компьютер r, и вместе с новой ОС у меня есть новое имя пользователя. Из-за этого у меня есть каталог ссылок, полный ссылок, которые больше не работают, но они бы стали, если бы я мог просто поменять свое старое имя пользователя fo r на новое в ссылках.

Fo r пример: файл /home/CurUserName/Reference/C/Car/Insurance указывает на /home/OldUserName/Reference/I/Insurance

Я нашел этот ответ r, в котором объясняется, как найти каждую ссылку в каталоге, и я нашел в другом месте в Интернете инструкции о том, как вручную обновить одну ссылку, но у меня недостаточно опыта с Bash, чтобы понять, как (o r if) я могу изменить их все сразу. Это возможно? Если да, то как?

1 Ответ

0 голосов
/ 01 июня 2020

Этот вопрос, вероятно, должен быть unde r unix / bash, но здесь вы go:

#!/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

Обратите внимание, что вам придется вводить любые подстановочные знаки fo r TARGET заключите его в одинарные кавычки, если вы не хотите расширения оболочки.

...