Самый простой способ восстановить символические ссылки, превращенные в текстовые файлы?
У меня были папки со многими символическими ссылками в них. К сожалению, после копирования этого вокруг различных файловых систем, они превратились в простые текстовые файлы с целевым объектом ссылки в качестве содержимого. То есть:
До
$ ll link
... link -> /path/to/target
После
$ cat link
/path/to/target
Какой самый простой способ восстановить эту ссылку? Возможно, однострочник или сценарий оболочки.
Предположим, у меня было сотни таких ссылок, есть ли способ восстановить их все, без ручного запуска исправления для каждой из них?
2 ответа
Используйте эту команду:
ls *txt | xargs -I R1 sh -c "cat R1 | xargs -I R2 ln -sf R2 R1"
замещать ls *txt
с чем-то, что выведет список текстовых файлов, которые должны быть символическими ссылками. Например, find . -name "*txt"
будет список всех * TXT-файлов в или под текущим каталогом.
Попробуй это:
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
но он может быть вложенным в отличие от ``.