найти файлы, измененные в пределах заданного диапазона времени - PullRequest
1 голос
/ 19 июня 2020

Всем привет. Я пытаюсь создать скрипт для поиска файлов, которые были изменены между X: 00-X: 59. X задается пользователем. Я пробовал это:

echo "Give hour: "
read N
if [ N>=0 && N<=24 ]
then
  find /home/mikepnrs -newermt "$N:00-59"
else
 echo "Out of bounds!"
fi

Есть решения?

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

-newermt primary не принимает временной диапазон в любом формате. Чтобы выбрать файлы, измененные, скажем, за период A-B, вам нужно два -newermt s; один для включения файлов новее A, другой для исключения файлов новее B.

Кроме того, есть два крайних случая, с которыми необходимо иметь дело:

  1. Пользователь может ввести 08 или 09, поскольку оба являются действительными часами. Но поскольку оба имеют начальный ноль, Bash будет рассматривать их как восьмеричные числа в контексте арифметики c и вызывать ошибку, поскольку 8 и 9 не являются допустимыми цифрами в базе 8.
  2. Когда пользователь введите 0, чтобы включить файлы, также измененные в 00:00, включая аргумент -newermt, должен быть вчерашним 23: 59: 59.

Итак, я бы сделал это так:

#!/bin/bash -
LC_COLLATE=C
read -rp 'hour ([0]0-23): ' hour
case $hour in
(0|00)
  find /home/mikepnrs               \
      -newermt 'yesterday 23:59:59' \
    ! -newermt '00:59:59' ;;
(0[1-9]|1[0-9]|2[0-3])
  find /home/mikepnrs                  \
      -newermt "$((10#$hour-1)):59:59" \
    ! -newermt "$hour:59:59" ;;
(*)
  printf 'invalid hour: %q\n' "$hour" >&2
  exit 1
esac
0 голосов
/ 19 июня 2020

Это не работает: newerXY дает вам файлы, которые новее, чем определенная временная метка, вы можете указать только одно условие (и вам нужны два из них: «новее, чем X: 00» и «старше, чем «X + 1: 00».

Я бы посоветовал вам использовать find для поиска файлов «новее, чем X: 00», и использовать -ls в конце поиска, это дает вы получите список вроде:

37436171902531110  0 -rw-rw-rw-   1 user   group   0 May 24 15:56 ./blabla_002.jpg
 2533274791505920  0 -rw-rw-rw-   1 user   group  55 May 26 15:13 ./test.txt
28147497671070312  0 -rw-rw-rw-   1 user   group   0 May 24 15:56 ./test_001.jpg
 8162774324885354  0 -rw-rw-rw-   1 user   group  25 Jun 17 10:22 ./try.txt
 2533274791505920  0 -rw-rw-rw-   1 user   group  55 May 26 15:13 test.txt
 8162774324885354  0 -rw-rw-rw-   1 user   group  25 Jun 17 10:22 try.txt

Используя awk скрипт, вы можете отфильтровать слишком новые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...