Как удалить строки из вывода, содержащего конкретную строку?

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

sudo find / -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more

Но вышеупомянутые выводы команды много записей, которые содержат строку /proc. Так, есть ли какие-либо лучшие пути, которыми я могу удалить те строки из вывода?

Кроме того, если у Вас есть какие-либо лучшие методы для контакта с вышеупомянутой ситуацией, затем предложите. Единственные критерии - то, что вывод должен содержать файлы, а также каталоги.


Править:-

Я изменил вышеупомянутую команду, чтобы также включать имена с newline, затем ответ добавленного Arronical и ответ Afshin Hamedi на него. Конечный результат:

sudo find / ! -path '*/proc*' -type f -mmin -120 -exec ls -al {} \; | grep -v anystring | less
4
задан 13 April 2017 в 05:23

3 ответа

Вы можете использовать grep -v для удаления строк, содержащих строку, например '/ proc', вы можете добавить это в качестве канала к вашей команде, чтобы сделать:

sudo find / -mmin -120 -printf '%T@ %p\n' | grep -v '^/proc' | sort -n | cut -f2- -d" " | more

Однако, как файлы в /proc/ носят временный характер, вы, вероятно, получите некоторые ошибки, например

find: â?~/proc/22232/fdinfo/5â?T: No such file or directory

. Вы можете избежать этого, перенаправив STDERR команды find на /dev/null, используя 2>/dev/null, например, так :

sudo find / -mmin -120 -printf '%T@ %p\n' 2>/dev/null | grep -v '^/proc' | sort -n | cut -f2- -d" " | more

Лучший метод

Вместо того, чтобы фильтровать результаты и избавляться от сообщений об ошибках, вы можете изменить команду поиска так, чтобы она никогда не выглядела в /proc:

sudo find / -not -path '/proc/*' -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more
9
ответ дан 23 November 2019 в 11:36

Я использовал бы -prune для такого рода вещи, например,

find / \( -path /proc -o -path /sys -o -path /run \) -prune -o -mmin -120 -printf '%T@ %p\n'
5
ответ дан 23 November 2019 в 11:36

Вы можете исключить путь '/ proc' следующим образом:

[sudo] find / ! -path "/proc" ...

, чтобы исключить записи 'proc' на любом уровне пути, используйте, как показано ниже

[sudo] find / ! -path "*/proc/*" ...
2
ответ дан 23 November 2019 в 11:36

Другие вопросы по тегам:

Похожие вопросы: