Получение файлов для текущей даты в Linux?

Обычно date +%d дает выход 08 для текущей даты, 08/10/2017. Но когда я делаю ls -lrt на пути, формат даты похож на Oct 8 15:03 , так, как мне получить файлы текущей даты?

Я использую команду

 ls -lrt XYZ.LOG* |grep "$(date +'%b %d')" |awk '{print $9}' 

но это не дает мне файл сегодняшней даты (08/10/2017), хотя он дает мне правильный результат для дат 10 – 31 числа любого месяца.

5 Solutions collect form web for “Получение файлов для текущей даты в Linux?”

Это немного обманывает, но это работает.

Сначала создайте пустой файл ссылки с определенной меткой времени, а именно: полночь:

 touch -d "$(date +%FT00:00:00)" /tmp/midnight 

Затем найдите файлы, которые новее, чем этот файл:

 find . -type f -newer /tmp/midnight 

Если вы хотите, чтобы ls подобный вывод был найден, а не только имена путей:

 find . -type f -newer /tmp/midnight -ls 

Если вы хотите найти файлы, соответствующие шаблону XYZ.LOG* :

 find . -type f -name 'XYZ.LOG*' -newer /tmp/midnight -ls 

Если у вас есть GNU find , вы можете обойти временный файл и использовать

 find . -type f -newermt 0 

чтобы файлы были изменены с полуночи.


Связано: Почему * не * parse `ls`?

Вы можете использовать stat(1) чтобы получить измененное время файла, но это не переносимо.

В Linux:

 $ stat -c %y some_file 2017-09-23 10:24:09.880806666 +0200 $ date -d @$(stat -c %Y some_file) +%d-%m-%Y 23-09-2017 

В BSD:

 $ stat -f %Sm -t %d-%m-%Y some_file 23-09-2017 

как получить файлы текущей даты?

Команда ls имеет опцию --time-style для печати времени в определенном формате:

 ls -l --time-style=+'%d-%m-%Y' | awk -vd=$(date +%d-%m-%Y) '$6==d' 

--time-style = СТИЛЬ
с -l , показать время, используя стиль STYLE: full-iso, long-iso, iso, locale или + FORMAT; FORMAT интерпретируется как 'date' ;

С zsh , используя квалификаторы glob и age :

 autoload age print -rl ./**/XYZ.LOG*(e_'age today now'_) 

или, если вы предпочитаете длинный формат списка:

 autoload age ls -lrtd -- **/XYZ.LOG*(e_'age today now'_) 

В общем, разбор ls выхода – плохая идея. Связано: Почему бы не разобрать ls ?


Ответ почти

В основном надежный способ получить все файлы сегодня с GNU ls будет:

 ls -lrt --time-style=+'%Y%m%d' * | grep " $(date +'%Y%m%d') " 

Это делает формат даты каждого файла одним полем, которое безопасно выбрано grep с включенными разделительными пространствами (что исключает вероятность того, что файл, названный в качестве даты, будет выбран (если он также не содержит пробелы в названии, не указано, но все еще возможно).

Конечно, если имя файла включает пробелы, анализ синтаксиса ls с awk {print $7} будет затронут и завершится сбой (больше полей) (попробуйте с файлом, созданным как touch ' 20171008 test' .

Используйте простой (GNU) поиск

Как было задано для файла (ов) сегодняшней даты (один день), мы можем сделать выбор с помощью find -mtime (для даты модификации или -atime или -ctime для двух других)

 $ find . -daystart -type f -mtime -1 -not -mtime -0 -print 

Параметр -daystart гарантирует, что временной интервал составляет от полуночи.
a -mtime -1 выбирает файлы дневного времени (и меньше, т.е. сегодня).
-not -mtime -0 отклоняет файлы в будущем.

Не так просто найти

Когда требуется время в диапазоне (не ограничиваясь целыми днями), это заклинание может помочь:

 find ./ -type f -newermt "$dstart" -not -newermt "$dend" -print 

где dstart и dend содержат начальный и конечный временные пределы:

 dstart=$( date -d '20171006 22:10:12' ) dend=$( date -d '20171008 20:10:12' ) find ./ -type f -newermt "$dstart" -not -newermt "$dend" -print 
  • копировать файлы, измененные после определенной даты с помощью cp-переключателей
  • Продолжить загрузку, если временная метка не изменилась
  • Удалить последний измененный файл
  • ls -lu не дает последнего времени доступа
  • Получить строки между двумя временными метками из файла
  • touch и tar из текстового файла
  • find-cnewer сломан на NTFS-3g?
  • Время, оставшееся для следующего прогона
  • найти команду для новейших 500 файлов в дереве каталогов, а также быть совместимым с POSIX
  • эпоха для GMT
  • Проверить, был ли файл изменен после даты в имени файла
  • Linux и Unix - лучшая ОС в мире.