Bash: Как проанализировать файл журнала, который содержит вывод ls -ltr, используя скрипт bash для извлечения имен файлов, которые были изменены до определенного времени - PullRequest
1 голос
/ 28 октября 2019

Я пытаюсь получить все файлы в каталогах SFTP, которые были изменены в последний раз до 24 часов, используя скрипт Unix bash. Обратите внимание, что опция lftp не поддерживается в моей среде. Итак, я создал скрипт, который будет перечислять все подкаталоги каталога SFTP в локальный файл, затем я использовал цикл для обхода всех имен этих подкаталогов, напечатал содержимое каталога с помощью ls -ltr и указал, чтовывод в локальный файл.

Теперь у меня есть файл с содержанием ниже, и давайте предположим, что текущее время - 28 октября 22: 32.

-rw------- 1 200      100             1930 Oct 25 08:31 File1
-rw------- 1 200      100              280 Oct 25 11:32 File2
-rw------- 1 200      100              280 Oct 25 12:17 File3
-rw------- 1 200      100              280 Oct 25 22:31 File4
-rw------- 1 200      100              280 Oct 26 22:32 File5
-rw------- 1 200      100              280 Oct 27 22:31 File6
-rw------- 1 200      100              280 Oct 16 09:59 File7
-rw------- 1 200      100              280 Oct 16 09:59 File8
-rw------- 1 200      100              280 Oct 16 10:00 File9

Можно ли получить все имена файлов и время их последнего измененияштампы с датой последнего изменения

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019

Я закончил анализ файла журнала построчно, извлек время последнего изменения в переменную и имя файла в другую переменную. Затем я преобразовал последнюю измененную строку времени в формат времени Unix, а затем в число эпох. Точно так же я получил номер эпохи для sysdate-1. Наконец, я сравнил эти два значения и отфильтровал имена файлов, соответствующие моим критериям. фрагмент кода приведен ниже

prev_day_time=$(date +%s -d "$(date --date='1 day ago')")
file_mod_time=$(date +%s -d "$(date -d "$(echo $(echo $files_list | awk '{print $1}') | sed -e 's/\(.....\)/\1 /')")")
0 голосов
/ 28 октября 2019

Для автоматизации я настоятельно рекомендую использовать 'lftp'. «Sftp» - это простой интерфейс, подходящий для интерактивного использования (например, нет кода состояния для сбоев и т. Д.).

У «lftp» есть много опций, помимо «sftp». В частности, он имеет листинг «на стороне клиента» (cls):

sftp
open sftp://host/path
user user password
cls -l --time-style='%Y-%m-%d %H:%M:%S'
Output:
drwxr-xr-x    2 root     root         4096 2019-10-13 16:01:46 /bin/
drwxr-xr-x    3 root     root         4096 2019-06-30 08:07:02 /boot/
drwxr-xr-x    2 root     root         4096 2019-06-09 19:36:33 /cdrom/
drwxr-xr-x   18 root     root         3960 2019-10-19 08:08:01 /dev/
drwxr-xr-x  150 root     root        12288 2019-10-20 15:49:39 /etc/
drwxr-xr-x    4 root     root         4096 2019-06-09 23:18:04 /home/

. Если вы ищете сокращение, вы также можете отсортировать по времени (я считаю, --sort=date, и наоборот) -r)и остановите обработку, как только вы совпадете с диапазоном дат.

Примечание: sftp имеет ограниченную команду 'find'. К сожалению, он не предлагает фильтрацию по дате.

Большинство других клиентов sftp, которые я пробовал, использовали формат LS по умолчанию. Исключением являются модули SFTP для Perl, Python, которые предоставляют клиенту дату в формате «Unix», что позволяет проводить любой тест. Однако это значительно больше работы, чем использование lftp.

...