Como remover linhas da saída contendo uma string específica?

4

Estou tentando encontrar os arquivos modificados mais recentes em meu sistema nas últimas duas horas. O comando que estou usando é:

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

Mas o comando acima gera muitas entradas que contêm a string /proc . Então, existem maneiras melhores de remover essas linhas da saída?

Além disso, se você tiver métodos melhores para lidar com a situação acima, sugira. O único critério é que a saída deve conter arquivos e diretórios.

EDITAR: -

Eu modifiquei o comando acima para também incluir nomes com newline , então adicionei resposta da Arronical e Afshin Hamedi's responde a isto. O resultado final é:

sudo find / ! -path '*/proc*' -type f -mmin -120 -exec ls -al {} \; | grep -v anystring | less
    
por Raphael 15.09.2016 / 13:27

3 respostas

9

Você pode usar grep -v para remover linhas contendo uma string, como '/ proc', você pode adicionar isso como um pipe ao seu comando para fazer:

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

No entanto, como os arquivos em /proc/ são de natureza transitória, você provavelmente terá alguns erros, como

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

Você pode evitar isso redirecionando o STDERR do comando find para /dev/null usando, 2>/dev/null da seguinte forma:

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

Um método melhor

Em vez de filtrar os resultados e livrar-se de suas mensagens de erro, você pode alterar seu comando de localização para que nunca pareça em /proc :

sudo find / -not -path '/proc/*' -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more
    
por Arronical 15.09.2016 / 13:44
5

Eu usaria -prune para esse tipo de coisa, por exemplo,

find / \( -path /proc -o -path /sys -o -path /run \) -prune -o -mmin -120 -printf '%T@ %p\n'
    
por steeldriver 15.09.2016 / 14:48
2

Você pode excluir o caminho '/ proc' da seguinte forma,

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

para excluir entradas "proc" em qualquer nível de caminho, use como abaixo

[sudo] find / ! -path "*/proc/*" ...
    
por αғsнιη 15.09.2016 / 13:56