Как преобразовать жесткую ссылку в обычный файл?

Как преобразовать жесткую ссылку в обычный файл?

Я понимаю, что каждый файл — это жесткая ссылка. Именно это я и имею в виду: если на инод ссылается более одного файла, как можно скопировать инод так, чтобы каждый файл ссылался на отдельный инод с тем же содержимым?

Например:

echo "Example" > one
ln one two

Как мне сделать так, чтобы файл twoимел то же содержимое, что и one, без совместного использования inode? Я хотел бы "дублировать", если хотите, файлы.

решение1

Это можно сделать с помощью команды

find -samefile filename -exec sed -i ';;' {} \;

или если вы знаете номер инода файла

find -inum inode -exec sed -i ';;' {} \;

Обратите внимание, что обе эти команды находят только файлы с соответствующими инодами в подкаталогах текущего рабочего каталога. Если вам нужно выполнить поиск по всем файлам в вашей файловой системе, вам нужно будет запустить эту команду из корневого каталога.

Первая часть find -samefile filenameнаходит все файлы, которые разделяют один и тот же inode. Затем выполняется , sed -i ';;'который копирует файл в файл с тем же именем (обратите внимание, что мы используем скрипт sed ';;'вместо ';', в противном случае findаргумент будет интерпретироваться ;как конец команды -exec).

Связанный контент