Хорошо, некоторое время назад я обнаружил, что, похоже, ошибка в наутилусе.
/tmp$ mkdir test/
/tmp$ mkdir test2/
/tmp$ echo "very important stuff" > test/important-file.txt
/tmp$ ln -s /tmp/test/ test2/test
Если вы попытаетесь mv test2/test .
, bash достаточно умен, чтобы ответить:
mv: «test2/test» and «./test» identify the same file
Я создал символическую ссылку для проверки (каталог, содержащий файл) в другом месте, а затем я переместил символическую ссылку в то место, где каталог был
Но затем nautilus попадает в игру:
Наутилус понимает, что символическая ссылка является каталогом, и он любезно предлагает мне объединить их:
Теперь я слил их (я очевидно думал, что это две разные директории). И в результате ...
tmp$ ls -la
lrwxrwxrwx 1 cool-user best-group-ever 9 août 26 23:51 test -> /tmp/test
Хорошо. Таким образом, я потерял свой каталог (что является нормальным, потому что я переписал его) и в итоге получил бесполезную круглую символическую ссылку, но ... что случилось с моим important-file.txt
? У него был индекс, на который больше не ссылается ни один каталог в моей системе.
И в качестве дополнительного вопроса: является ли это особым поведением nautilus или это ошибка?
Почему и как это случилось со мной, это длинная история, но у меня в каталоге были действительно важные (и конфиденциальные) файлы, которые я хотел бы вернуть
Я отправлю свой ответ, но я не принимаю его, так как это, кажется, не значениями хорошее (по крайней мере, с точки зрения эффективности или полноты).
Это потребовало бы программы (я запишу это в C), что рекурсивно обходы все дерево каталогов , регистрирует каждый referencied inode в заказанном списке (избегающий дубликатов), и затем diffs это против фактического списка inode.
различие недостающие файлы
Не уверенный это возможно. В конце концов, все Ваше Ваше свободное пространство являются списком inodes.
Посмотрите однако функция Orphan File ext4.