У меня есть веб-приложение, в котором есть несколько символических ссылок в подкаталогах. Мне нужно переместить приложение в другую структуру каталогов, и мне нужно обновить все символические ссылки, чтобы указать новый путь. Например:
Старый Dir: /home/user/public_html/dev
New Dir: /home/user/public_html/qa
Старый Symlink: /home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/dev/images
Новый Symlink:/home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/qa/images
Проблема в том, что их много в разных каталогах. Как я могу рекурсивно искать из корня и воссоздать все символические ссылки, указывающие на /dev/
с /qa/
?
источник
find /home/user/public_html/qa/ -type l -lname '/home/user/public_html/dev/*'
ничего не выводится.find /home/usr/public_html/qa/ -type l
? Если ссылки не найдены, с вашей системой происходит что-то очень странное.find /home/user/public_html/qa/ -type l
" выводит ссылки. Но добавление параметра -lname ничего не выводит.Если кто-то еще находит это при поиске решения: создайте файл с именем «linkmod.sh», содержащий:
и беги
При необходимости вы можете использовать опцию -lname в find.
ПРИМЕЧАНИЕ: вы должны использовать 2x \ в шаблонах перед любыми символами, которые требуют \ in sed, так как echo удаляет один. Например
Удалите
echo
из последней строки, если команды ln верны.источник
echo
в последней строке этого сценария иecho
вfind .. | xargs .. linkmod.sh ...
самой команде и должны быть удалены.Я создал скрипт bash
link_rename.sh
для рекурсивного переименования символических ссылок в данном каталогеЭто может быть выполнено как
link_rename.sh /home/human/dir link1 link2
Скрипт имеет 3 аргумента:
link1
старый шаблон, который будет замененlink2
новая модель с которойlink1
будет замененаСценарий рекурсивно читает все символические ссылки в каталоге, используя
find "$DIR" -type l
и обрабатывает их построчно.$line
символическая ссылка, которую нужно переименоватьCUR_LINK_PATH
старый путьNEW_LINK_PATH
получается путем замены строки в старом пути ссылки.Старая символическая ссылка удаляется, а новая символическая ссылка создается с помощью
ln -s "$NEW_LINK_PATH" "$line"
источник
Я закончил тем, что написал сценарий PHP командной строки, который, кажется, делает свое дело.
источник