Поиск файлов, которые были изменены за последние 2 минуты в вашем домашнем каталоге и содержат определенную строку.

Поиск файлов, которые были изменены за последние 2 минуты в вашем домашнем каталоге и содержат определенную строку.

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

 find -type d -mmin -2 -ls | grep -Ril "mystring" 

Кажется, это работает, но, по-видимому, он печатает только те файлы, которые содержат заданную строку внутри, а не файлы, которые были изменены 2 минуты назад и содержали эту строку. Похоже, что первая часть команды не выполняется.

решение1

У вас была хорошая попытка с вашим собственным предложением.

find -type d -mmin -2 -ls | grep -Ril "mystring"

Это определило бы каталоги ( -type d), которые были изменены в течение последних двух минут, а не файлы ( -type f). Передача вывода -lsв grepобычно выполняла бы поиск сгенерированных имен файлов для mystring. Однако в этом случае флаг -Rизменяет поведение grep, и он игнорирует ваш список имен файлов, вместо этого выполняя поиск по каждому файлу в текущем каталоге и ниже.

Итак, давайте разделим проблему на две части.

  1. Поиск файлов, которые были изменены за последние 2 минуты в вашем домашнем каталоге.

    find ~ -type f -mmin -2
    
  2. [Файлы], которые содержат определенную строку

    grep -Fl 'certain String' {files...}
    

Теперь вам нужно собрать их вместе. Это {}заполнитель для имен файлов, сгенерированных с помощью findшага 1, а завершающий символ +указывает, что {}может повторятьсямного раз, т.е. несколько имен файлов

    find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +

Изменение grepна echo grepпокажет вам, что именно выполняется командой find; это может быть полезным методом отладки:

    find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +

Пожалуйста, рассмотрите возможность выполнения man findи man grepузнайте, какие существуют различные варианты, такие как -Fи -lв grep -Fl, так как в противном случае вы не научитесь ничему из заданного вам упражнения; вы просто будете копировать ответ.

решение2

В zshоболочке:

grep -l -F -i 'string' ~/**/*(.Dmm-2)

... где **рекурсивно соответствует подкаталогам, и где .Din (.Dmm-2)означает «соответствует только обычным файлам ( .), но включает скрытые файлы ( D)», а где mm-2означает «измененные в течение последних двух минут».

Связанный контент