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-ой столбец, где и находится имя файла.