La causa raíz también podría ser permisos de archivo insuficientes. Encontré el problema al intentar pegar texto en vi desde Windows y ninguna de las sugerencias anteriores funcionó. Solo después de darme permiso de escritura en el archivo, el texto podría pegarse con un simple clic derecho del mouse en el modo INSERTAR de vi.
Один из способов приблизиться к этому — настроить файлы временных меток, чтобы ограничить даты, которые вы ищете:
touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time
... а затем запросить find
файлы, которые новее начального -времени, но не новее конечного -времени:
find. -type f -newer /tmp/start-time ! -newer /tmp/end-time
Собираем все воедино:
touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time
find. -type f -newer /tmp/start-time ! -newer /tmp/end-time -name '*.xml' -exec grep JMS111 /dev/null {} +
rm /tmp/start-time /tmp/end-time
Это будет искать файлы в правильном временном интервале с именами, заканчивающимися на .xml
, а затем передать эти имена файлов в grep
, помещая столько, сколько может за проход. Я добавил /dev/null
в качестве «файла» для поиска grep вместе с именами файлов из find
, если они есть. Таким образом, если есть только один совпадающий файл, grep
«принуждается» сообщать о совпадающем имени файла (, поскольку /dev/null никогда не совпадет, об этом не будет сообщено ).
На выходе будут имена файлов и соответствующие строки из этих файлов.
Вы можете использовать
find. -name 'a[123]' -ctime 6 | xargs grep -l 'JMS111'
-ctime 6
ищет файлы старше 6 дней. Он фактически сравнивает дату создания файла с 24-часовым периодом между 6 *24 часами и 7 *24 часами до запуска команды. Если дата создания находится в этом периоде, а имя файла — «a1», «a2» или «a3», то find
печатает путь к этому файлу. Поскольку период, указанный параметром -ctime
Примечание. :Если вы используете -ctime -6
, find напечатает имена файлов, которым 6 дней или меньше, -ctime +6
напечатает имена файлов, которым 6 дней или больше. Кроме того, некоторые версии find позволяют указать единицы измерения, например, 6h для 6-часовой давности.
Вместо этого вы можете использовать -mtime
, если хотите искать по времени модификации, а не по времени создания.
Использование xargs
позволяет легко проверить, получаете ли вы правильный список файлов из find перед выполнением grep
. Также,если вы поместите grep в первичный -exec
, find вызывает его один раз для каждого найденного файла, тогда как xargs
получает список файлов, которые он передает одному вызову grep
, что менее ресурсоемко.
Одним из недостатков -ctime
является то, что вам нужно подсчитать количество дней с момента создания файла, но вы можете вычислить это, запустив
find. -ctime n | xargs ls -l
пока не появятся файлы с интересующей вас датой.
... И вам не нужно помнить об удалении файлов брекетинга, как вы делаете с -newer
.
См. скриншот ниже,
Нам нужно указать файл, содержащий определенную строку и созданный в определенную дату. Для этого мы можем выполнить следующую команду:
Приведенная выше команда выведет список файлов, созданных 6 октября и содержащих строку «тест». Обратитесь к скриншоту ниже,
На первом скриншоте видно 3 файла. Два из них (test.scala и text2.txt )содержат строку 'test', но отличаются датой создания. А на втором снимке экрана видно, что мы перечислили файл, содержащий строку «тест», созданный 6 октября.