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

найти файлы, измененные в интервале в unix

Я использую linux и какое-то время пытался выяснить команду find, чтобы иметь возможность перечислить каталоги, измененные за 24 часа определенное количество дней назад, но я не могу заставить ее работать. Среди прочего я пробовал:

find -type d -mtime +1 -mtime -2

Но он возвращает 0 совпадений, а find -type d -mtime +1 дает 16721 совпадение и find -type d -mtime -2 дает 120 совпадений. У меня должно получиться около 50-60 матчей.

Я также пробовал -a вариант для AND между ними, но это не имеет значения.

Аргументы в пользу -mtime вариант найти немного нелогичен. По сути, вы просите «показать мне все, что было старше двух дней назад и моложе двух дней назад» ... вариант '+' немного шаткий (от find(1)):

Когда find выясняет, сколько 24-часовых периодов назад к файлу последний раз обращались, любая дробная часть игнорируется, поэтому для соответствия -atime +1 файл должен быть доступен как минимум два дня назад.

Для однодневного диапазона вы можете просто использовать -mtime 2, в противном случае я предлагаю использовать -mmin и немного арифметики оболочки, чтобы добраться туда, куда вы хотите.

Я бы использовал сценарий:

STARTTIMEFILE=`mktemp` || exit 1
touch -d '2009-10-01 00:00' "$STARTTIMEFILE" || exit 1

ENDTIMEFILE=`mktemp` || exit 1
touch -d '2009-11-01 00:00' "$ENDTIMEFILE" || exit 1

find . -newer "$STARTTIMEFILE" -and -not -newer "$ENDTIMEFILE" -ls

rm -f "$STARTTIMEFILE" "$ENDTIMEFILE"

Намного легче понять, чем -mtime.