Ответ 1
Почему вы не должны использовать ls
:
Разбор ls
- плохая идея. Мало того, что поведение определенных символов в именах файлов undefined и зависит от платформы, для ваших целей, беспорядок с датами, когда они полгода в мимо. Короче говоря, да, это, вероятно, будет работать для вас в вашем ограниченном тестировании. Он будет не не зависящим от платформы (таким образом, не переносимость), и поведение вашего синтаксического анализа будет не гарантировано с учетом диапазона "юридических" имен файлов в различных системах. (Ext4, например, позволяет пробелы и новые строки в именах файлов).
Сказав все это, лично я использовал бы ls
, потому что это быстро и просто;)
Изменить
Как отметил Хьюго в комментариях, OP не хочет использовать stat
. Кроме того, я должен указать, что ниже раздел BSD-stat специфичен (флаг %Sm
не работает, когда я тестирую Ubuntu; Linux имеет команду stat
, если вы заинтересованы в ней, прочитайте справочная страница).
Итак, решение не stat
: используйте дату
date
, по крайней мере, в Linux, имеет флаг: -r
, который в соответствии с man page:
отображает время последней модификации файла FILE
Итак, сценарийное решение будет похоже на это:
date -r ${MY_FILE_VARIABLE}
который вернет вам что-то похожее на это:
zsh% date -r MyFile.foo
Thu Feb 23 07:41:27 CST 2012
Чтобы ответить на комментарий OP:
Если возможно с настраиваемым форматом даты
date
имеет довольно обширный набор переменных формата времени; прочитайте страницу руководства для получения дополнительной информации.
Я не уверен на 100% как переносимый date
во всех UNIX-подобных системах. Для BSD (например, OS X) это не сработает; флаг -r
для даты BSD делает что-то совершенно другое. Вопрос не "точно определяет, насколько переносимым является решение. Для решения на базе BSD см. Следующий раздел:)
Лучшее решение, BSD-системы (протестировано на OS X, используя BSD-stat, GNU stat несколько отличается, но можно заставить работать одинаково).
Используйте stat
. Вы можете отформатировать вывод stat
с помощью флага -f
, и вы можете выбрать отображение только данных изменения файла (что для этого вопроса является приятным).
Например, stat -f "%m%t%Sm %N" ./*
:
1340738054 Jun 26 21:14:14 2012 ./build
1340738921 Jun 26 21:28:41 2012 ./build.xml
1340738140 Jun 26 21:15:40 2012 ./lib
1340657124 Jun 25 22:45:24 2012 ./tests
Где первый бит - это время в эпоху UNIX, дата - время изменения файла, а остальное - имя файла.
Разбивка команды примера
stat -f "%m%t%Sm %N" ./*
-
stat -f
: вызватьstat
и указать формат (-f
). -
%m
: время эпохи UNIX. -
%t
: разделитель табуляции на выходе. -
%Sm
:S
говорит, что выводит вывод какstring
,m
говорит, что использует данные изменения файла. -
%N
: отобразить имя файла, о котором идет речь.
Команда в script в соответствии с строками следующего:
stat -f "%Sm" ${FILE_VARIABLE}
даст вам результат, например:
Jun 26 21:28:41 2012
Для получения дополнительной информации прочитайте справочную страницу для stat
; форматирование временной отметки выполняется strftime
.