Назад | Перейти на главную страницу

Linux: using find to locate files older than <date></date>

find имеет хорошую поддержку для поиска файлов, более измененных менее X дней назад, но как я могу использовать find найти все файлы, измененные после определенной даты?

Я ничего не могу найти в find справочную страницу, чтобы сделать это, только чтобы сравнить время с другим файлом или проверить разницу между временем создания и текущим моментом. Является ли создание файла с желаемым временем и сравнение с этим единственным способом сделать это?

Нет, вы можете использовать строку даты / времени.

Из man find:

-newerXY ссылка
Сравнивает отметку времени текущего файла со ссылкой. Аргумент ссылки обычно является именем файла (и для сравнения используется одна из его временных меток), но также может быть строкой, описывающей абсолютное время. X и Y являются заполнителями для других букв, и эти буквы выбирают время, принадлежащее тому, как ссылка используется для сравнения.

          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

Пример:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

Не имеет прямого отношения к вопросу, но может быть интересным для некоторых, кто здесь наткнется.

найти команда не поддерживает напрямую параметр -older для поиска файлов старше некоторой требуемой даты, но вы можете использовать оператор отрицания (используя пример принятого ответа):

touch -t 201003160120 some_file
find . ! -newer some_file

вернет файлы старшая чем указанная дата.

Если у вас есть только '-newer file', вы можете использовать этот обходной путь:

# create 'some_file' having a creation date of 16 Mar 2010:
touch -t 201003160120 some_file

# find all files created after this date
find . -newer some_file

касание человека:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

Предполагая, что у вашего касания есть эта опция (у меня сенсорная 5.97).

find <dir> -mtime -20

эта команда find найдет файлы, измененные за последние 20 дней.

  • mtime -> изменено (atime = доступ, ctime = создан)
  • -20 -> возраст менее 20 дней (20 ровно 20 дней, +20 более 20 дней)

Вы можете добавить дополнительные ограничения, например:

find <dir> -mtime -20 -name "*.txt"

то же самое, что и раньше, но находит только файлы с расширением .txt.

Просто добавьте - вы даже можете использовать два новых аргумента для поиска во временном интервале:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

найти все файлы с марта 2007 года.

find ! -newermt “<DATE>”

как это:

find ! -newermt “jan 01 2015” 

Это даст вам файлы старше 01.01.2015 в вашем текущем каталоге.

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/

Вы можете использовать такой сценарий

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

Сохраните его в своем $ PATH как «newerthan» и сделайте его исполняемым.

Затем вы можете найти файл, измененный после определенной даты, например:

newerthan "2010-03-10"

или

newerthan "last year"

или

newerthan "yesterday"

Это должно делать то, что вы хотите. Я не думаю, что есть встроенный способ добиться этого иначе.

если ваша дата отформатирована так, что ее можно сравнить,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'