Как я могу рекурсивно перечислить все файлы, которые были изменены с 22.12.2011 по 24.12.2011?
files
recursive
timestamps
зажим
источник
источник
Ответы:
Вообще говоря, когда вы ищете файлы в каталоге и его подкаталогах рекурсивно, используйте
find
.Самый простой способ указать диапазон дат
find
- создать файлы на границах диапазона и использовать-newer
предикат.источник
-newer
необходимо здесь?-newer
не отрицается, второй. «Найти файлы, которые новее, чем,start
но не новее, чемstop
».start
иstop
.Используя решение Жиля, и после прочтения мужчина снова нашел (1), я нашел более простое решение. Лучшим вариантом является -newerXY. Можно использовать флаги m и t.
Так что решение
Нижняя граница включительно, а верхняя граница исключительна, поэтому я добавил к ней 1 день! И это рекурсивно. Хорошо работает на find v4.5.9.
источник
find -newermt 20150212 \! -newermt 20150213 | xargs grep 'keyword' -m 50 -l
(-m 50
= поиск в первых 50 строках).-exec ... +
вfind(1)
, как:find -newermt 20150212 \! -newermt 20150213 -exec grep keyword -m 50 -l {} +
. Это делает то же самое, но дешевле.find 4.7.0-git
).В дополнение к уже даным ответам, обратите внимание, что вы можете напрямую указать свои даты:
или
если вы дополнительно хотите указать время.
источник
Предполагая, что вам не нужна точность до секунд, это должно сработать.
EDIT: Изменены
cmin
кmmin
после @ комментарий Eelvex в. РЕДАКТИРОВАТЬ: '\!' отсутствуетисточник
-cmin
это «изменение статуса»,-mmin
это «изменение данных». Вы, вероятно, хотите-mmin
find
Можно использовать формат даты и времени в формате ISO, поэтому для сервера, например, в формате UTC, вы можете указать смещение количества часов, где бы вы ни находились. Это также позаботится о том, чтобы добавить день, так как вы тоже сравниваете время:источник
Пожалуйста, обратите внимание, что вопрос, помеченный как дубликат, и поэтому ограничен от прямого ответа, поэтому я публикую здесь. Этот ответ предназначен для ответа на вопрос «необходимо переместить файлы в другую папку на основе даты создания [дубликата]»
Ответы разумны, но с чисто командой поиска были некоторые ограничения. Я написал этот сценарий оболочки, чтобы пройти через каталог с таким количеством файлов, что файловая система давала метаданные, пытаясь выполнить ls. Кроме того, некоторые системы * nix будут выдавать ошибку слишком многих аргументов при запуске ls.
Команда find очень мощная, и я начал с перечисленных методов, но у меня было столько лет данных в этом каталоге, что мне приходилось многократно проходить по всем файлам. Это приводит к большому количеству ненужных передаваемых файлов. Я пытался делать один экран в год и запускать несколько находок, но это приводило к большому количеству ошибок в каждой находке, и файлы терялись, когда одна из находок перемещала ее.
Мой сценарий оболочки перемещает файл в каталог назначения с 4-значным годом и 2-значным месяцем. Его можно легко расширить до двухзначного дня, раскомментировав пару строк и закомментировав их аналоги. Я считаю, что он более эффективен, потому что он выполнял шаги за один проход поиска, поэтому несколько команд поиска и проходов по каталогу не нужны.
После сохранения и создания исполняемого файла вы можете вызвать этот скрипт с помощью команды find следующим образом.
Вам не нужно беспокоиться об установке параметра newermt для find, поскольку все, что находит find, - это одно выполнение для каждого найденного файла, и скрипт принимает все решения.
Имейте в виду, что если вы не выберете -type f, это приведет к перемещению каталогов, что может вызвать проблемы. Вы также можете использовать -type d, если хотите переместить только каталоги. Отсутствие установки типа почти наверняка приведет к нежелательному поведению.
Помните, что этот сценарий был адаптирован к моим потребностям. Возможно, вы захотите просто использовать мою конструкцию как источник вдохновения для лучшего сценария ваших потребностей. Спасибо!
Соображения: эффективность команды может быть БОЛЬШО повышена за счет разрешения неограниченному количеству аргументов проходить через скрипт. На самом деле это относительно просто, если вы передадите переменную $ @. Расширение функциональности этого позволило бы нам использовать, например, функцию find -exec + или использовать xargs. Я могу быстро реализовать это и улучшить свой собственный ответ, но это только начало.
Поскольку это был сеанс сценария с одним выстрелом, вероятно, можно сделать много улучшений. Удачи!
источник