автоматизируйте процесс фиксации всех неработающих ссылок

Я настоятельно рекомендовал бы, чтобы перезагрузка чисто согласовала вещи.

Но если Вы против этого, попробовать umount -l.

5
04.04.2015, 12:21
2 ответа

Первая проблема заключается в том, что ваша команда находит , найдет только ссылки, которые использовали полные пути, а не относительные. Чтобы проиллюстрировать:

$ 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) спрашивает, к какому этому он должен ссылаться на.

5
27.01.2020, 20:38

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

Он рекурсивно находит и удаляет неработающие программные ссылки.

1
27.01.2020, 20:38

Теги

Похожие вопросы