поведение будет зависеть от типа файловой системы. В классических файловых системах Unix (и, в частности, в файловой системе Mac OS X HFS), интересная вещь о переименовании файла в файловой системе заключается в том, что он вообще не влияет на индексный дескриптор файла; это влияет только на каталог (или каталоги), где файл был перемещен с/на. Таким образом, в пределах одной файловой системы единственными временными метками, которые изменяются для переименования, являются время изменения каталога, содержащего файл. Например *:
$ fl -a -c -m -n xxx.pl
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 xxx.pl
$ mv xxx.pl yyy.pl
$ fl -a -c -m -n yyy.pl
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 yyy.pl
$
Это означает, что на таких файловых системах, вы не можете сказать, когда файл был переименован некоторое время после того, как файл был переименован.
* fl
является домашней командой; вызов эквивалентен вызову Mac OS X stat
stat -f '%Sa %Sm %Sc %N'
. Это лишь незначительно связано с командой GNU/Linux stat
.
С другой стороны, эмпирические данные показывают, что файловая система Linux ext4 записывает изменение имени с изменением времени модификации самого inode.
$ stat -c '%x %y %z %n' test.dat
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 test.dat
$ mv test.dat test.data
$ stat -c '%x %y %z %n' test.data
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-22 09:11:49.074339525 -0700 test.data
$
Итак, что вы можете сделать, зависит от того, на котором вы работаете и в какой файловой системе указан ваш файл.
Если у вас есть доступная и запущенная служба inotify, вы можете записать событие, которое является переименованием файла, но если вы не записываете событие, нет способа «посмертного» узнать, когда файл был переименован ,
Время изменения в каталоге не является хорошим показателем того, когда был изменен конкретный файл; он изменяется всякий раз, когда любой файл создается, перемещается, удаляется. Если в каталоге есть только один файл, то время изменения, вероятно, указывает, когда этот файл был создан или переименован, но отдельные каталоги файлов являются исключением, а не правилом.
Это очень легко превращается в вопрос программирования: «Как вы пишете программу в Unix/Linux, чтобы сообщить, когда файл изменился? Существуют ли какие-либо команды, которые уже делают это?» с подзапросом «Являются ли команды переносимыми?» Это важная информация для программирования оболочек, а программирование (включая программирование оболочки) специально предназначено для SO. –