Самый простой способ восстановить символические ссылки, превращенные в текстовые файлы?
1419
congusbongus
У меня были папки со многими символическими ссылками в них. К сожалению, после копирования этого вокруг различных файловых систем, они превратились в простые текстовые файлы с целевым объектом ссылки в качестве содержимого. То есть:
До
$ ll link ... link -> /path/to/target
После
$ cat link /path/to/target
Какой самый простой способ восстановить эту ссылку? Возможно, однострочник или сценарий оболочки.
Предположим, у меня было сотни таких ссылок, есть ли способ восстановить их все без ручного запуска исправления для каждой из них?
Получите удобство с `debugfs`. Старайтесь не наносить * слишком * большой ущерб ...
Ignacio Vazquez-Abrams 11 лет назад
0
`debugfs` - совершенно не тот инструмент, который можно использовать здесь.
wingedsubmariner 11 лет назад
0
Из любопытства, какие файловые системы вы копировали, и какие инструменты вы использовали?
wingedsubmariner 11 лет назад
0
2 ответа на вопрос
1
wingedsubmariner
Используйте эту команду:
ls *txt | xargs -I R1 sh -c "cat R1 | xargs -I R2 ln -sf R2 R1"
Замените ls *txtчто-нибудь, что выведет список текстовых файлов, которые должны быть символическими ссылками. Например, find . -name "*txt"будет список всех * TXT файлов в или под текущим каталогом.
1
Emil Vatai
Попробуй это:
ls * | while read f; do ln -sf "$(cat $f)" "$f" done
как в ответе wingedsubmariner, ls * следует заменить что-то, что будет перечислять именно те файлы, которые вы хотели.
Я нахожу
ls * | while read f; do # command executed for each file done
Конструкция очень полезна. Как я знаю, это правильный способ обработки всех имен файлов, например, если в имени файла есть пробелы, тогда $ f будет работать (в отличие от for f in $(ls *); do...done).
К вашему сведению: $ (cmd) - это то же самое, cmdно может быть вложенным в отличие от ``.