Я использую эту команду, чтобы найти все файлы в каталоге, содержащие определенную строку:
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
если вы не хотите искать скрытые файлы.