Выполните команду в каждом каталоге

Наиболее нейтральным для файловой системы и распространения решением (которое я могу придумать) является использование самого старого файла, заданного командой ls -lact / etc , которая проверяет метаданные каждого файла на время создания. Хотя в это можно играть, на него не влияет touch или файлы, созданные путем распаковки архивов (например, tar -p для сохранения временных меток).

Я думаю, что лучше смотреть на файлы, а не на каталоги, поскольку каталоги действительно изменяют свои метаданные времени создания, когда изменяется их содержимое (возможно, кто-нибудь сможет пролить свет на то, почему это так?)

ls -lact --full-time /etc |tail

Системы, в которых отсутствует GNU Coreutils должен удалить опцию - полный рабочий день (порядок сортировки по-прежнему будет правильным, и вы все равно получите день). Вы можете получить время создания из метаданных файла с помощью stat FILE | grep Change (запустите это для самого старого файла, указанного в ls -lact ).

В других системах, отличных от Linux, stat , вероятно, имеет эту информацию в несколько ином порядке, возможно, требуя других флагов. Обратите внимание, что при этом по-прежнему используются метаданные файла, и точность не гарантируется.

Также обратите внимание, что stat из GNU Coreutils имеет время «рождения», которое имеет тенденцию быть неправильным (Linux с ext4 дает 0 , чтобы указать, что оно неизвестно, FreeBSD с UFS показала время «рождения», которое старше, чем у запрашиваемой мной системы). Правильное значение было указано как время «изменения».

Если вы хотите пофантазировать и получить , просто время создания самого старого файла в / etc :

ls -lact --full-time /etc |awk 'END {print $6,$7,$8}'

Эта команда работала для меня в старой системе FreeBSD (UFS , без утилит GNU):

stat "/etc/$(ls -act /etc |tail -1)" |awk -F\" '{print $6}'

(Да, это анализирует ls , и это табу, но в / etc ] не должно быть файлов с озорными именами.)

Вы можете также используйте stat , чтобы получить другие форматы времени. Например, чтобы получить время создания в эпохи Unix : stat -c% Z FILE (с GNU обратите внимание, что % Z - это «время последнего состояния change », но это правильный флаг для моих систем Linux и BSD, как указано выше; % W -« время рождения файла ») или stat -f% c FILE (с BSD).

0
27.06.2015, 15:04
0 ответов

Теги

Похожие вопросы