Как на Bash получить файлы, изменённые за сегодняшний день

Bash имеет огромные возможности по программированию/скриптованию и администрированию операционной системы. Не важно: Linux это, FreeBSD, или MacOS – на Bash можно сделать многое.

ПрограммыFreeBSDterminalКодLinuxТрюки BashВремя

Bash не всегда очевиден, но безусловно силён. Базовые концепции Unix-философии сделали написание скриптов и однострочников на нём сравнительно простым, а мощь программ – почти безграничной.

Но хватит пафоса, это лишь небольшой рецепт, в котором мы используем команду ls для получения списка файлов, однако, с параметром, о котором редко вспоминают: --time-style – получим вывод даты в удобном нам формате. А именно выполним следующую команду:

$ ls -al --time-style=+%D
total 122012
drwxrwxr-x  16 root   syslog  4096 11/27/19 .
drwxr-xr-x  14 root   root    4096 10/15/17 ..
-rw-r--r--   1 root   root       0 09/30/19 alternatives.log
-rw-r--r--   1 root   root     477 09/29/19 alternatives.log.1
-rw-r--r--   1 root   root     177 08/01/19 alternatives.log.2.gz
-rw-r--r--   1 root   root    3286 05/01/19 alternatives.log.3.gz
-rw-r--r--   1 root   root    1460 04/29/19 alternatives.log.4.gz
-rw-r--r--   1 root   root    3548 10/16/17 alternatives.log.5.gz
...

Так мы вывели дату последней модификации в американском стиле (MM/DD/YYYY). Теперь с помощью grep и date мы отфильтруем файлы, которые принадлежат именно к текущей дате:

$ ls -al --time-style=+%D | grep $(date +%D)
drwxrwxr-x  16 root   syslog              4096 11/27/19 .
drwxr-xr-x   2 root   root                4096 11/27/19 atop
-rw-r-----   1 syslog adm              2232669 11/27/19 auth.log
-rw-rw----   1 root   utmp            40578048 11/27/19 btmp
-rw-rw-r--   1 root   utmp              292292 11/27/19 lastlog
drwxr-xr-x   2 root   adm                 4096 11/27/19 nginx
-rw-r--r--   1 root   root                   0 11/27/19 popularity-contest.0
-rw-r--r--   1 root   root               33740 11/27/19 popularity-contest.new
-rw-r-----   1 syslog adm                34597 11/27/19 syslog
-rw-r-----   1 syslog adm              1027129 11/27/19 syslog.1
-rw-rw-r--   1 root   utmp                6528 11/27/19 wtmp

Но это только файлы за сегодня в текущей директории. Теперь добавим рекурсивный обход текущей директории, чтобы сделать ls -la на все файлы, что содержатся в текущей папке и подпапках:

find . -type f -print \
  | xargs ls -al --time-style=+%D \
  | grep $(date +%D)

С помощью find получаем список всех файлов, включая файлы поддиректорий. А xargs передаёт их аргументами нашей команде ls.

Если же вас не устраивает такой вывод столбиком с кучей лишних данных, а нужны только названия файлов – используем небольшую программку на awk:

find . -type f -print \
  | xargs ls -al --time-style=+%D \
  | grep $(date +%D)
  | awk 'BEGIN {FS="[ \t]+|\\|"} {print $7}'

– плюсом ко всему перечисленном ещё и делим по пробельным символам и выводим 7-ой столбец, где и находится имя файла.

Фото Как установить часовой пояс в Linux
Как установить часовой пояс в Linux

В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через Интернет ваше время слетит.

Фото Зачем писать "hello world"?
Зачем писать "hello world"?

Немного размышлений об одной из самых известных программ для обучения программированию.