Відповіді:
Це залежить від того, що саме ви маєте на увазі під "відкритим", але загалом, так. Зазвичай записуються три часові позначки:
mtime
- оновлюється при зміні вмісту файлу. Це час файлу «за замовчуванням» у більшості випадків.ctime
- оновлюється, коли файл або його метадані (власник, дозволи) змінюютьсяatime
- оновлюється, коли файл читаєтьсяОтже, загалом те, що ви хочете бачити, - atime
це файл. Ви можете отримати це за допомогою stat
або з ls
. Ви можете використовувати ls -lu
для цього, хоча я вважаю за краще використовувати ls -l --time=atime
(який повинен підтримуватися майже у всіх сучасних дистрибутивах Linux), оскільки я його не використовую часто, і коли я це можу, я краще його запам’ятаю. І щоб сортувати за часом, додайте -t
прапор до ls. Так що ви йдете.
Хоча є великий застереження. Оновлення аніме кожного разу при читанні файлу викликає багато, зазвичай, непотрібного вводу-виводу, сповільнюючи все. Отже, більшість дистрибутивів Linux за замовчуванням відповідає noatime
параметру монтажу файлової системи, який в основному вбиває atimes, або інше relatime
, що оновлює atimes лише після того, як ліміт пройшов (як правило, один раз на день) або якщо файл був фактично змінений з попереднього читання. Ви можете дізнатися, чи активовані ці параметри, виконавши mount
команду.
Також зауважте, що час доступу визначається за допомогою inode, а не за назвою файлу, тому, якщо у вас є жорсткі посилання, читання з одного сайту оновить усі імена, що посилаються на той самий файл.
І майте на увазі, що c - це не «творення»; створення не відслідковується файловими системами Unix / Linux, що здається дивним, але насправді має сенс, оскільки файлова система не може знати, чи є оригіналом - можливо, файл був створений сорок років тому і скопійований сюди. І насправді багато редакторів файлів працюють, роблячи копії над оригіналом. Якщо вам потрібна ця інформація, найкраще скористатися системою контролю версій на зразок git
.
mount
.
ls
скорочує час за замовчуванням до розумної точності. Щоб побачити час у повній точності, можна скористатися --full-time
.
ls -ltu
список усіх файлів, показ та сортування за часом доступу.
Від man ls
:
-u with -lt: sort by, and show, access time with -l: show access
time and sort by name otherwise: sort by access time
Якщо ваш список призначений для споживання людиною, використовуйте ls
один з прапорців -tu
для сортування дат ( для доступу (читання) часу, просто -t
для зміни (запису) часу або -tc
для зміни часу введення). Дивіться відповідь mattdm для отримання додаткової інформації (зокрема застереження щодо -a
та визначення цього поняття -c
).
Якщо це для програмного споживання, то аналіз синтаксичного сигналу ls
є проблематичним . Якщо ваша оболонка zsh, вам все одно не знадобиться ls
: zsh має класифікатори глобального сортування, щоб сортувати відповідність, збільшуючи час доступу ( *(Oa)
), inode change ( *(Oc)
) або модифікації ( *(Om)
). Малі регістри o
сортуються за збільшенням віку.
act_on_files_by_date *(Om)
В іншому випадку, якщо ви знаєте, що назви файлів не містять символів нового рядка або недрукувальних (у поточній мові), ви можете зробити щось на зразок
ls -t | while read -r name; do act_on_one_file "$name"; done
ls -t | xargs -I {} act_on_one_file {}
Якщо ви хочете викликати команду на багатьох файлах одночасно, вам потрібно більше налаштувань. Зауважте, що act_on_files_by_date $(ls -t)
це не працює так, як імена файлів, що містять символи підстановки або пробіли, будуть розширені в результаті заміни команди. Наступний код працює до тих пір, поки жодне ім'я файлу не містить новий рядок або символ, який не можна роздрукувати:
IFS='
'
set -f
act_on_files_by_date $(ls -t)
set +f
unset IFS
Якщо ви хочете впоратися з довільними іменами файлів, вам буде дуже важко, не вдаючись до більш потужних інструментів, ніж стандартна оболонка: zsh, perl, python ...