Я считаю, что копировать , удалить и переместить назад - это способ сделать Это.
Для большого количества файлов вы не хотите запускать три процесса для каждого файла.
Вы можете использовать cpio
, чтобы уменьшить количество процессов.
Внутри вашего дерева:
find_the_hardlinks > hardlinks #find your hardlinks
< hardlinks cpio -pdv ../the_copy
< hardlinks | rm -d '\n' #delete the links
pwd=$PWD; cd ../the_copy;
< "$pwd/hardlinks" cpio -pdlv "$pwd" #hardlink back from copy
cd "$pwd"; rm -rf ../the_copy #remove the copy so it's like a move
Это не совсем просто, но довольно эффективно и может быть обернуто в общий сценарий.