Поиск файлов, содержащих строку, и вывод списка их имен, отсортированных по дате изменения.

Поиск файлов, содержащих строку, и вывод списка их имен, отсортированных по дате изменения.

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

grep -lir "string" path_to directory

Пример

grep -lir "users" /var/www/mysite

Эта команда отображает все файлы в указанном каталоге, содержащие строку 'users'. Однако я хочу отсортировать их по убыванию даты изменения; от самых новых к самым старым.

Любая помощь?

решение1

Сначала мы используем Zопцию, а затем на другом конце xargs с опцией -0 перехватит имена файлов и выведет их статистику, отсортирует и удалит информацию о времени, чтобы отобразить отсортированный список с указанием первых новых файлов.

 grep -Zlir users /var/www/mysite | xargs -0 -r stat --format='%Y+%n' | sort -t+ -k 1,1nr | cut -d+ -f2-

решение2

С zsh:

print -rl ./**/*(.De_'grep -qi "string" $REPLY'_om)

Это используетквалификаторы globдля выбора только обычных файлов ( .), которые содержат string(т. е. результаты glob, для которых выражение e_'grep -qi "string" $REPLY'_возвращает true), а затем с помощью omсортирует окончательные результаты по mtime(сначала самые новые). Удалите , Dесли вы не хотите искать скрытые файлы.

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