Получите время последнего изменения файла

Я хочу извлечь фрагмент Jul 22 от вывода:

-rw-rw-r-- 1 douglas douglas  92188 Jul 22 08:47 master-terfron-21-07.log

Это - вывод команды:

ls -l *.log

Как я использовал бы регулярное выражение для получения необходимой части?

0
задан 23 July 2015 в 15:31

3 ответа

Поскольку Вы хотите только время последнего изменения (месяц и дата) эти .log файлы в текущем каталоге, можно просто использовать -r опция date. Нет никакой потребности ни в каком regex или других лишних командах.

можно использовать эту остроту оболочки:

for i in *.log; do echo "$i: $(date '+%b-%d' -r "$i")"; done

, Например, я нахожу месяц и дату последнего изменения всего .txt файлы в текущем каталоге:

$ for i in *.txt; do echo "$i: $(date '+%b-%d' -r "$i")"; done
file.txt: Feb-12
new.txt: Jul-23

основная команда, включенная здесь:

date '+%b-%d' -r file.txt

$ date '+%b-%d' -r file.txt 
Feb-12

, Если Вы хотите сделать операцию рекурсивно, используйте find:

find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;

Пример:

$ find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
./foo/list.txt: Jul-16
./new.txt: Jul-15
./file.txt: Jul-23

РЕДАКТИРОВАНИЕ:

Ради ответа на оригинал regex путь:

$ ls -l *.txt | grep -Po '.*[[:digit:]]+ \K[[:alpha:]]{3} [[:digit:]]{2}'
Jul 23
Jul 15
  • grep -Po указывает, что мы будем использовать PCRE и только брать подобранную часть

  • .*[[:digit:]]+ соответствия до нашей желаемой части и \K отбрасывания соответствие

  • [[:alpha:]]{3} [[:digit:]]{2} соответствия три буквенных символа (месяц), сопровождаемый пространством и двумя цифрами (дата).

5
ответ дан 1 October 2019 в 06:33

Для получения даты последнего изменения файла, можно использовать:

$ stat -c '%n: %y' *.log
alternatives.log: 2015-07-20 09:28:52.727063510 +0200
apport.log: 2015-07-23 09:32:58.282590564 +0200

Посмотрите stat страница справочника для дальнейших опций.

3
ответ дан 1 October 2019 в 06:33

Простое решение для использования ls с cut:

ls -l filename | cut -f 6,7 -d' '

пример:

$ touch file
$ ls -l file | cut -f 6,7 -d' '
Jul 23

Другое решение:

 ls -l filename |awk {'print $9" was last modified   "$6" "$7'}
0
ответ дан 1 October 2019 в 06:33

Другие вопросы по тегам:

Похожие вопросы: