I heard that symlinks can't be edited. So do I have to create new symlinks and then overwrite the existing ones?
Os links simbólicos não podem ser editados, isso está correto. Você pode substituir links simbólicos para arquivos em uma única operação com a opção -f
para ln
, e se você adicionar -T
você pode processar links simbólicos para diretórios da mesma maneira:
ln -sfT /data/Tim/dir1 symlink1
criará symlink1
apontando para /data/Tim/dir1
, substituindo qualquer link simbólico existente (ou arquivo!) denominado symlink1
.
how can I get the pathname of the directory pointed to by a symlink, and then use some text processing programs to replace the old name of the ancestral directory in the pathnames with its new name, and create a symlink pointing to the directory with a new pathname?
realpath
fornecerá o caminho absoluto para o qual o link simbólico aponta. Para processar seus links simbólicos:
for symlink in *; do
if [ -L "${symlink}" ]; then
origpath="$(realpath "${symlink}")" && ln -sfT "${origpath/home/data}" "${symlink}"
fi
done
Isso recupera o caminho de cada arquivo no diretório atual (presumo que todos os links simbólicos no diretório atual precisam ser corrigidos) e o vincula novamente, substituindo a primeira ocorrência de home
por data
. Usar &&
garante que o link simbólico só será substituído se realpath
tiver êxito (ele falhará se o destino não existir).