Найти файлы, созданные между диапазонами дат

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

замечания:

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

6 ответов


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

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

find ~/ -mtime $(echo $(date +%s) - $(date +%s -d"Dec 31, 2009 23:59:59") | bc -l | awk '{print  / 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")

если вы используете 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.

попробуйте это:

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

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


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

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

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

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

эта работа на Linux со временем модификации, время создания не поддерживается. На Эксе -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

oldfiles скрипт

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

скрипт oldfiles в этом хранилище

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

конечно, если вы опустите -n он будет просто работать, не нужно перепечатывать .

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

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

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

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

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

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

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

      -я н : минуты (по умолчанию, с N равным 1 мин)
      - д Н: дней
      - 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; нет многословия, dry-run):

$ 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 сценарий:

https://github.com/drbeco/oldfiles