2013-07-22 4 views
4

Есть ли определенная команда Unix/Linux, которая будет показывать, когда был переименован файл? У меня есть файл в ящике Linux и вы хотите знать, когда файл был переименован. Я пробовал ls -ltr, но показывал только дату, когда он был создан, а не когда он был последним изменен.Команда Linux/Unix для проверки того, когда файл был переименован

Есть ли конкретная команда Unix/Linux для этого?

+0

Это очень легко превращается в вопрос программирования: «Как вы пишете программу в Unix/Linux, чтобы сообщить, когда файл изменился? Существуют ли какие-либо команды, которые уже делают это?» с подзапросом «Являются ли команды переносимыми?» Это важная информация для программирования оболочек, а программирование (включая программирование оболочки) специально предназначено для SO. –

ответ

9

Вы можете использовать

stat filename 

Проверить Access когда это было последнее чтение.

Проверьте, пожалуйста, Modify, если он был обновлен.

Проверьте Change, если оно было переименовано.

Плюс другая информация файл как блоки, дескрипторы и т.д.

+0

спасибо ... это было прекрасно ... именно то, что мне было нужно :) – user2579439

+2

Время изменения времени, когда был изменен индекс. Переименование не изменяет индекс. –

+0

Я имел в виду поле 'Change'. Я никогда ничего не говорил об изменениях inodes после переименования. – bsd

1

Вы можете использовать библиотеку Inotify для уведомления, когда что-то происходит в файле. Скорее всего, есть привязки к скриптовым языкам.

+0

спасибо, что я определенно могу это сделать ... но что, если конкретный файл уже переименован и хочет знать, когда он был переименован, вот что я хочу знать ... – user2579439

+0

@ user2579439 Вы не можете знать о прошлых переименованных. Вы можете узнать о переименовании в момент времени T. Зарегистрируйте его или обработайте его прямо сейчас, но вы не сможете узнать о прошлых переименованиях. См. Ответ Джонатана для получения дополнительной информации. – Xaqq

6

поведение будет зависеть от типа файловой системы. В классических файловых системах 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 statstat -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, вы можете записать событие, которое является переименованием файла, но если вы не записываете событие, нет способа «посмертного» узнать, когда файл был переименован ,

Время изменения в каталоге не является хорошим показателем того, когда был изменен конкретный файл; он изменяется всякий раз, когда любой файл создается, перемещается, удаляется. Если в каталоге есть только один файл, то время изменения, вероятно, указывает, когда этот файл был создан или переименован, но отдельные каталоги файлов являются исключением, а не правилом.

0

В AIX вы можете использовать эквивалент «стат» -

ISTAT имя_файла

Вы должны быть в состоянии знать, последнее обновление, измененную и доступ к времени файла вниз до секунды по с дополнительной информацией.

Смежные вопросы