Найти файлы, созданные между диапазонами дат
Я использую 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
изменения в соответствии с типом времени, которое вы выберете.