Я настоятельно рекомендовал бы, чтобы перезагрузка чисто согласовала вещи.
Но если Вы против этого, попробовать umount -l
.
Первая проблема заключается в том, что ваша команда находит
, найдет только ссылки, которые использовали полные пути, а не относительные. Чтобы проиллюстрировать:
$ ln -s /home/terdon/foo/NonExistantFile foo
$ ln -s NonExistantFile bar
$ tree
.
|-- bar -> NonExistantFile
`-- foo -> /home/terdon/foo/NonExistantFile
в приведенном выше примере, я создал две разбитые ссылки. Первый использовал абсолютный путь и второй, родственник. Если я сейчас попробую ваш команду
(имеющую его echo
Команда с релизом вместо того, чтобы запустить ее, чтобы мы могли видеть, что он делает), только один из двух будет найден:
$ find . -lname '/home/terdon/*' -exec \
sh -c 'echo ln -snf "/home$(readlink "$0")" "$0"' {} \;
ln -snf /home/home/terdon/foo/NonExistantFile ./foo
Вторая проблема заключается в том, что ваш путь не прав. Вы воссоздаете ссылки как »/ Home $ (ReadLink« $ 0 »)" "$ 0"
. Команда ReadLink
ReadLink
уже покажет полный путь, поэтому добавление / Home
к нему приводит к нему / Home / Home / ...
, который не то, что вы хотите.
Со главное, что вы пытаетесь, невозможно. Если ссылка сломана, это означает, что ее цель не существует. Поскольку цель не существует, вы не можете просто перенять файл, нигде некуда связать его - . Единственное, что вы могли бы сделать, это воссоздать цель ссылки. Это, однако, вряд ли будет очень полезным, поскольку он просто сделает ваши разбитые ссылки на новые, пустые файлы. Если это действительно то, что вы хотите сделать, вы можете попробовать
find . -type l -exec sh -c 'touch "$(readlink "{}")" ' \;
, наконец, вы, возможно, захотите создать более сложный скрипт, который i) находит все сломанные ссылки II) ищет вашу машину для файлов с тем же именем, что и цель Ссылка III) представляет вас со списком их и IV) спрашивает, к какому этому он должен ссылаться на.
There are lots of broken links in my system. I wrote a script to relink all broken links. But, after the scripts runs, find would again show me that the links still exists...
Этот лайнер может быть интересен для систем GNU Linux. Я полагаю, что это пришло от @Giles, но я не могу найти ссылку на данный момент.
find -xtype l -delete
Он рекурсивно находит и удаляет неработающие программные ссылки.