Відповіді:
Це залежить від того, що саме ви маєте на увазі під "відкритим", але загалом, так. Зазвичай записуються три часові позначки:
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 ...