Мне нужно создать список файлов для использования в сценарии оболочки. В списке должны быть все файлы (в указанном каталоге), которые имеют жесткую ссылку. Я хочу заменить жесткие ссылки символическими ссылками.
(Очевидно, я не могу удалить последнюю жесткую ссылку. И этот вопрос связан с другим вопросом, который имеет роковую ошибку.)
Я открыт для любых предложений о том, как это сделать. Если вы считаете, что этот вопрос является дубликатом, убедитесь, что другой ответ действительно работает. Я еще не нашел рабочее решение, которое соответствует этим требованиям.
- ищет в каталоге, который потенциально содержит жестко связанные файлы, чтобы сохранить
- ищет другие жестко связанные файлы из каталога верхнего уровня или корня файловой системы
- обе директории могут быть предоставлены в качестве параметров
- может также работать только с файлами указанных типов (например, изображения)
Моя (новая) идея состоит в том, чтобы передать вывод этой find
find "$dir" -type f -links +1
В этот:
find "$topdir" -xdev -samefile <output from other find> -printf '%i:%p\n' | sort --field-separator=:
Если это сработает, то я предоставлю полученный список циклу while, похожему на этот (из исходного кода):
last_inode=
while IFS= read -r path_info
do
inode=${path_info%%:*}
path=${path_info##*:}
if [[ $last_inode != $inode ]]; then
printf "$inode\n"
last_inode=$inode
path_to_keep=$path
else
rm -- "$path"
ln -s -- "$path_to_keep" "$path"
fi
done
Я также могу добавить параметр (-iname "*.jpg"
к (первой) команде поиска, который будет действовать только для файлов JPEG. (Я также открыт для лучших предложений здесь.)