Получение даты последнего изменения файлов - PullRequest
0 голосов
/ 23 сентября 2018

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

Matthews-MacBook-Air-3:Q3 Matthew$ find . -name '*.jpg'

./MontrealTest/daves_images/mtl10.jpg
./MontrealTest/daves_images/mtl7.jpg
./MontrealTest/gregs_photos/mtl1.jpg
./MontrealTest/photos_by_harth/mtl11.jpg
./MontrealTest/photos_by_harth/mtl5.jpg
./MontrealTest/photos_by_harth/mtl9.jpg
./MontrealTest/sandeeps_collection/mtl4.jpg
./MontrealTest/sandeeps_collection/mtl8.jpg
./MontrealTest.jpg
./SimpleTest/dir1/fee.jpg
./SimpleTest/dir2/fum.jpg
./SimpleTest/dir3/foo.jpg
./SimpleTest/dir4/foe.jpg
Matthews-MacBook-Air-3:Q3 Matthew$ 

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Чтобы получить последнюю модифицированную дату / время в удобочитаемой форме любого файла.

stat -c <format sequence> file

Где последовательность форматирования может быть %y или %z или обе, если вы хотите, чтобы она читалась человеком.или %Y или %Z или и то, и другое, если вы хотите, чтобы это было в секундах с начала эпохи.

Примеры:

stat -c %y new_file.txt

Пример вывода:

2018-09-2217: 32: 02.264570176 -0700

stat-c %Y new_file.txt

Пример вывода:

1537662722

С man stat

-c --format= FORMAT использовать указанный FORMAT вместо значения по умолчанию;выводить новую строку после каждого использования FORMAT

% y время последней модификации данных, читаемое человеком

% Y время последней модификации данных, секунд с начала эпохи

% zвремя последнего изменения состояния, читаемое человеком

% Z время последнего изменения состояния, секунды с начала эпохи

Я бы сказал, для точности, читайте файлы в переменной при запуске find, затем запустите stat, медленнее, но безопаснее.

0 голосов
/ 23 сентября 2018

Это зависит от того, какая у вас версия find (что обычно зависит от того, какую ОС вы используете).Если find поддерживает примитив -printf, вы можете сделать что-то подобное (но см. man find для получения дополнительной информации о форматировании):

find . -name '*.jpg' -printf '%t %p\n'

Если ваш find не поддерживает -printf, вы можете заставить его выполнить stat, чтобы сделать то же самое (и снова, смотрите man stat для получения дополнительных опций форматирования):

find . -name '*.jpg' -exec stat -f '%Sm %N' {} +
...