Подтвердить что ты не робот

Поиск файлов в терминале между диапазоном дат

Я использую AIX через telnet здесь на работе, и я хотел бы знать, как найти файлы в определенной папке между диапазоном данных, например: Я хочу найти все файлы в папке X, которые были созданы между 01- Авг-13 и 31 августа-13.

замечания:

  • Трюк TOUCH (где вы создаете 2 пустых файла для использования опции -newer) не работает для меня, как только роли пользователя, которые у меня есть на сервере, не позволяют мне создавать файлы.
  • Мне нужно найти определенные даты, а не дни (например: файлы, созданные более 30 дней назад и т.д.).

Спасибо заранее!

4b9b3361

Ответ 1

Вы можете использовать ниже, чтобы найти то, что вам нужно.

Найти файлы старше определенной даты/времени:

find ~/ -mtime $(echo $(date +%s) - $(date +%s -d"Dec 31, 2009 23:59:59") | bc -l | awk '{print $1 / 86400}' | bc -l)

Или вы можете найти файлы между двумя датами. Первая дата более поздняя, ​​последняя дата, старше. Вы можете перейти ко второму, и вам не нужно использовать mtime. Вы можете использовать все, что вам нужно.

find . -mtime $(date +%s -d"Aug 10, 2013 23:59:59") -mtime $(date +%s -d"Aug 1, 2013 23:59:59")

Ответ 2

Если вы используете GNU find, начиная с версии 4.3.3, вы можете:

find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls

Он примет любую строку даты, принятую GNU date -d.

Вы можете изменить c в -newerct на любые из a, B, c или m для просмотра atime/birth/ctime/mtime.

Другой пример - файлы списка, измененные с 17:30 до 22:00 6 ноября 2017 года:

find -newermt "2017-11-06 17:30:00" ! -newermt "2017-11-06 22:00:00" -ls

Подробная информация от man find:

   -newerXY reference
          Compares the timestamp of the current file with reference.  The reference argument is normally the name of a file (and one of its timestamps  is  used
          for  the  comparison)  but  it may also be a string describing an absolute time.  X and Y are placeholders for other letters, and these letters select
          which time belonging to how reference is used for the comparison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

          Some combinations are invalid; for example, it is invalid for X to be t.  Some combinations are not implemented on all systems; for example B  is  not
          supported on all systems.  If an invalid or unsupported combination of XY is specified, a fatal error results.  Time specifications are interpreted as
          for the argument to the -d option of GNU date.  If you try to use the birth time of a reference file, and the birth time cannot be determined, a fatal
          error  message  results.   If  you  specify a test which refers to the birth time of files being examined, this test will fail for any files where the
          birth time is unknown.

Ответ 3

Попробуйте следующее:

find /var/tmp -mtime +2 -a -mtime -8 -ls

чтобы найти файлы старше 2 дней, но не старше 8 дней.

Ответ 4

Некоторые хорошие решения здесь. Хотел разделить мой, а также короткий и простой.

Я использую find (GNU findutils) 4.5.11

$ find search/path/ -newermt 20130801 \! -newermt 20130831

Ответ 5

Используйте stat, чтобы получить время создания. Вы можете сравнить время в формате YYYY-MM-DD HH:MM:SS лексикографически.

Эта работа с Linux с временем модификации, временем создания не поддерживается. В AIX параметр -c может не поддерживаться, но вы все равно сможете получить информацию, используя grep, если ничего не работает.

#! /bin/bash
from='2013-08-01 00:00:00.0000000000' # 01-Aug-13
to='2013-08-31 23:59:59.9999999999'   # 31-Aug-13

for file in * ; do
    modified=$( stat -c%y "$file" )
    if [[ $from < $modified && $modified < $to ]] ; then
        echo "$file"
    fi
done

Ответ 6

Script oldfiles

Я попытался ответить на этот вопрос более полно, и в итоге я создал полный script с параметрами, которые помогут вам понять команду find.

script oldfiles находится в этом репозитории

Чтобы создать новую команду find, вы запустите ее с опцией -n (dry-run), и она вернет вам правильную команду find, которую вы должны использовать.

Конечно, если вы опустите -n, он просто запустится, не нужно повторно указывать команду find.

Использование:

$ oldfiles [-v...] ([-h|-V|-n] | {[(-a|-u) | (-m|-t) | -c] (-i | -d | -o| -y | -g) N (-\> | -\< | -\=) [-p "pat"]})

  • Если параметры классифицируются в следующих группах:
    • Справка и информация:

      -h, --help: показать эту помощь.
         -V, --version: Показать версию.
         -v, --verbose: включить подробный режим (кумулятивный).
         -n, --dry-run: не запускать, просто объясните, как создать команду "find"

    • Тип времени (доступ/использование, время модификации или измененный статус):

      -a или -u: время доступа (использование)

         -m или -t: время модификации (по умолчанию)
         -c: изменение статуса inode

    • Диапазон времени (где N - положительное целое число):

      -i N: минуты (по умолчанию, N равно 1 мин)
         -d N: дни
         -o N: месяцев
         -y N: лет
         -g N: N - ДАТА (пример: "2017-07-06 22:17:15" )

    • Тесты:

      -p "pat": необязательный шаблон для соответствия (пример: -p "*.c" для поиска c файлов) (по умолчанию -p "*" )
         - \ > : файл более новый, чем заданный диапазон, т.е. время, измененное после него.
         -\<: файл старше заданного диапазона, т.е. время до него. (По умолчанию)
         -\=: файл, который точно равен N (мин., день, месяц, год).

Пример:

  • Найти исходные файлы C более чем за 10 минут (время доступа) (с подробностью 3):

$ oldfiles -a -i 10 -p"*.c" -\> -nvvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vvv -a -i 10 -p "*.c" -\> -n Looking for "*.c" files with (a)ccess time newer than 10 minute(s) find . -name "*.c" -type f -amin -10 -exec ls -ltu --time-style=long-iso {} + Dry-run

  • Найти файлы заголовков H старше месяца (время модификации) (многословность 2):

$ oldfiles -m -o 1 -p"*.h" -\< -nvv Starting oldfiles script, by beco, version 20170706.202054... $ oldfiles -vv -m -o 1 -p "*.h" -\< -n find . -name "*.h" -type f -mtime +30 -exec ls -lt --time-style=long-iso {} + Dry-run

  • Найти все (*) файлы за один день (1 декабря 2016 года, без многословия, сухая работа):

$ oldfiles -mng "2016-12-01" -\= find . -name "*" -type f -newermt "2016-11-30 23:59:59" ! -newermt "2016-12-01 23:59:59" -exec ls -lt --time-style=long-iso {} +

Конечно, при удалении -n программа запустит команду find и избавит вас от проблем.

Я надеюсь, что это поможет всем, наконец, изучить этот {a,c,t}{time,min} вариант.

вывод LS:

Вы также заметите, что параметр "ls" ls OPT изменяется в соответствии с типом выбранного времени.

Ссылка для клонирования/загрузки oldfiles script:

https://github.com/drbeco/oldfiles