У меня есть папка с множеством файлов, в которых есть несколько ссылок на символы, например
/some_path -> /dir/file1
/some_path2 -> /dir/file2
/some_path3 -> /dir/file3
Но я не помню ни some_path
, ни каких файлов из dir
, имеющих sym ссылки, указывающие на них.
Теперь мне нужно удалить dir
(мне это действительно нужно по некоторым причинам). И я также хочу, чтобы ни один файл не указывал на какой-либо файл из dir
, так как я его удалю.
Как мне отменить связь этих файлов? Что, если я просто удалю dir
, они сами разойдутся?
Если somepath
находятся в том же месте и предполагается, что они находятся в той же файловой системе, что и /dir
, мы могли бы сделать предположение и использовать подход Денниса Уильямсона
find -L / -xdev -samefile /dir/file1
Таким образом, если предположить, что /dir/file1
является оригиналом и сказать /opt/foo
является символической ссылкой, эта команда должна пройти /
, не пересекая границы файловой системы /
, и найти все файлы, которые совпадают с оригинальными. Это будет включать в себя символические ссылки и жесткие ссылки.
Мы также могли бы использовать lname
, чтобы увидеть, указывает ли содержимое символической ссылки на /dir/file1
find -lname "*passwd*"
Однако, более разумным подходом, вероятно, будет сначала переместить или удалить dir
, а затем ищите неработающие символические ссылки, как предложено в ответе пользователя rozcietrzewiacz на соответствующее сообщение
find / -xdev -type l ! -exec test -e {} \; -print
Если вы хотите избавиться от этих неработающих символических ссылок, вы также можете использовать флаг -delete
Чтобы отменить связь файлов,
unlink /path/to/the/link_file
Если вы удалите dir
, он не отсоединит себя. ]