Поиск файлов в каталоге за два дня, то есть сегодня и вчера

Короче говоря, да, вы предполагаете правильно.

Длинный ответ: на основе консенсуса этой ветки , цитирую:

Это требуется для всех 64-битных гостей и гостя Windows => версия 8. * либо 32-битная или 64-битный.

становится ясно, что вы не можете запустить 64-битную гостевую машину без VT -x.

1
19.07.2016, 12:05
1 ответ

С GNU find :

find . -daystart -type f -mtime -2 -mtime +-1 -ls

предоставит вам файлы, которые были в последний раз изменены между вчера 00:00:00 и 23:59: 59.999999999 сегодня. Это может дать вам неправильные результаты при переключении с / на летнее время (в часовых поясах с зимним / летним временем), поскольку он считает количество 24-часовых единиц с начала сегодняшнего дня и вокруг перехода на / с летнего времени, есть один 23 или 25-часовой день.

Вы также можете сделать (все еще с GNU find ):

find . -type f -newermt yesterday ! -newermt tomorrow -ls

Но это даст файлы, измененные точно в 00: 00: 00.000000000 завтра, а не те, которые были изменены вчера в это время. Ужасно маловероятно, что файл был последний раз изменен за эту наносекунду, но это может произойти для файлов, время модификации которых было установлено произвольно с помощью touch , например, или в файловых системах, которые не имеют субсекунды. детализация по времени.

С помощью zsh :

autoload age # best in ~/.zshrc
ls -lrtd -- *(D.e:'age yesterday tomorrow':)

Или рекурсивно, как с find :

ls -lrtd -- **/*(D.e:'age yesterday tomorrow':)

(то же примечание о границах, что и для find -newermt выше).


Что касается того, почему вы не получили правильный результат с:

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

Во-первых, обратите внимание, что -a (подразумевается, когда опущено) имеет приоритет над -o , поэтому приведенное выше на самом деле:

find . \( -type f -a -mtime +2 -a -prune \) -o \
  \( -mtime +1 -a -exec ls -ltr {} \; \)

Таким образом, -тип f применяется только в первой группе.

-mtime +2 выбирает файлы, возраст которых, округленный до следующего дня (24 часа), строго больше 2, то есть файлы, которые были в последний раз изменены более 48 часов назад (по сравнению с текущей датой). ) и файлы -mtime +1 , которые в последний раз были изменены более 24 часов назад.

Вы хотите, чтобы возраст сравнивался с началом дня (отсюда (специфичный для GNU) -daystart ).

Также обратите внимание, что с -exec ls -lrt {} \; вы запускаете по одному ls для каждого файла, поэтому параметр -rt позволяет сортировать файлы бесполезно has ls имеет только один файл для сортировки. Вместо этого вы можете использовать -exec ls -lrt {} + , но даже тогда, если список файлов большой, ls может вызываться несколько раз.

3
27.01.2020, 23:35

Теги

Похожие вопросы