find
поддержки много форматов ввода даты. Самым простым форматом для получения является YYYYMMDD HH:MM:SS. У Вас уже есть цифры в правильном порядке, все, что необходимо сделать, извлечь первую группу (${timestamp%??????}
: возьмите все кроме последних 6 символов; ${timestamp#????????}
: возьмите все кроме первых 8 символов), и продолжайте идти, добавляя пунктуацию затем следующая группа, как Вы продвигаетесь.
timestamp=20130207003851
timestring=${timestamp%??????}; timestamp=${timestamp#????????}
timestring="$timestring ${timestamp%????}"; timestamp=${timestamp#??}
timestring="$timestring:${timestamp%??}:${timestamp#??}"
В ударе (и ksh и zsh), но не в пепле, можно использовать более читаемое ${STRING_VARIABLE:OFFSET:LENGTH}
создать.
timestring="${timestamp:0:8} ${timestamp:8:2}:${timestamp:10:2}:${timestamp:12:2}"
В файлы вида по дате, распечатайте имена файлов, которым предшествуют даты и вид что, затем разделите префикс даты. Использовать -printf
управлять выходным форматом. %TX
печатает часть времени изменения, определенного X
; если X
@
, Вы получаете число секунд с эпохи Unix. Ниже я печатаю три разделенных от вкладки столбца: время в поддающемся сортировке формате, имени файла, и время в человекочитаемом формате; cut -f 2-
удаляет первый столбец и вызов к expand
заменяет вкладку достаточным количеством пробелов для размещения всех ожидаемых имен файлов (корректируйтесь 40, как желаемый). Этот код предполагает, что у Вас нет новых строк или вкладок в именах файлов.
find -maxdepth 1 -type f \
-newermt "$timestring" -printf '%T@\t%f\t%Tb %Td %TH:%TM\n' |
sort -k1n |
cut -f 2- |
expand -t 40
С zsh
:
zmodload zsh/stat
newer() {
local t
zstat -A t -F %Y%m%d%H%M%S +mtime -- $REPLY && (( t >= timestamp ))
}
timestamp=20130207003851
print -rl -- /tmp/*(D.Om+newer)
newer
функция возвращает true для файлов, более новых, чем $timestamp
(отметьте это zsh
zstat
не поддерживает подвторую точность хотя).
Затем все, что мы делаем, использовать zsh
спецификаторы globbing: D
включать точечные файлы, .
только рассматривать регулярные файлы, Om
заказать на времени изменения, и +newer
звонить newer
функция для определения, который файл выбрать.
Если Вы хотите отобразить метки времени файла также, можно измениться newer
кому:
newer() {
local t
zstat -A t -F %Y%m%d%H%M%S +mtime -- $REPLY &&
REPLY+=$'\t'$t &&
(( t >= timestamp ))
}
Отметьте, хотя это, результат поколения имени файла будет включать метки времени, что означает Вас, не может использовать метки времени больше как имена файлов.
find -newermt "$timestring" -printf '%M@\t%f %Mb %Md %MH:%MM\n'
дает мне забавный вывод-rwxrwxrwx@ S0002975.LOG -rwxrwxrwxb -rwxrwxrwxd -rwxrwxrwxH:-rwxrwxrwxM
– Radek 12.02.2013, 03:25%T
для mtime,%M
полномочия. – Gilles 'SO- stop being evil' 12.02.2013, 03:29find /tmp -maxdepth 1 -type f -newermt "20130207 00:38:51" -printf '%T@\t%f-%Tb %Td %TH:%TM\n' | sort -k1n | cut -f 2-
Я разделил имя файла и время-
потому что я получу вывод в php и использовании - как разделитель. Огромное спасибо. – Radek 12.02.2013, 03:37