Самый простой способ восстановить символические ссылки, превращенные в текстовые файлы?

У меня были папки со многими символическими ссылками в них. К сожалению, после копирования этого вокруг различных файловых систем, они превратились в простые текстовые файлы с целевым объектом ссылки в качестве содержимого. То есть:

До

$ 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 но он может быть вложенным в отличие от ``.

Другие вопросы по тегам