Полагаю, вам нужно посмотреть исходную статистику файла и увидеть inode
, который является идентификатором файла. Если файл не перемещался с одного раздела / файловой системы / диска на другой (что на самом деле должно было быть операцией копирования-затем-удаления-оригинала), то inode
будет таким же.
К сожалению, обычно нет справочной таблицы inode
s, чтобы получить их новое имя / местоположение. Вам придется систематически обыскивать всю систему, что может быть не так уж и плохо, если вы сначала посмотрите на вероятные места. или если вы можете искать только в ограниченной области.
Вы можете использовать временную жесткую ссылку (идея Рикардо), чтобы определить, была ли она удалена, а не перемещена. Счетчик количества ссылок изменится с 1 на 2 при создании жесткой ссылки, и изменится с 2 на 1 при удалении аналога вашей временной жесткой ссылки. Если он удален, вам не нужно искать место назначения файла.
Если в этой области есть, скажем, несколько тысяч файлов, решение здесь должно работать очень хорошо, если их больше, в зависимости от вашей системы, оно может работать, но может быть задержка.
Если вы хотите уменьшить задержку, у вас может быть база данных SQL с файлами, для которых вы уже знаете inode
s. Например, /folder/filea
и /folder/fileb
Оба существуют с разными inode
с. Когда fileb
перемещается в filec
, вам не нужно stat
filea
искать inode
, потому что вы уже искали его ранее. Эта логика должна значительно сократить количество необходимых stat
команд. Однако, если filea
удалено и fileb
перемещено на место filea
, этот метод резкого сокращения не даст результатов, и в этом случае вам придется вернуться к поиску по всему рабочему каталогу.
У вас все еще есть возможность убедиться, что такие папки ОС, как /etc
или /dev
. используются только в качестве крайней меры. Который вам, возможно, никогда не придется искать, при условии, что вы можете обнаружить удаление, используя временную жесткую ссылку.
Насколько велика ваша рабочая зона? Вы точно знаете, будет ли файл всегда перемещаться из одного места в другое в пределах определенной рабочей папки? Дополнительные сведения о вашей проблемной среде будут полезны.