Estou procurando arquivos em meu diretório inicial que foram modificados nos últimos dois minutos e que também contêm uma determinada string. Eu tentei com este comando:
find -type d -mmin -2 -ls | grep -Ril "mystring"
Parece funcionar, mas aparentemente imprime apenas os arquivos com a string fornecida, em vez dos arquivos modificados pela última vez há 2 minutos contendo a string. Parece que a primeira parte do comando não foi executada.
Responder1
Você fez uma boa tentativa com sua própria sugestão
find -type d -mmin -2 -ls | grep -Ril "mystring"
Isso teria identificado diretórios ( -type d
) que foram modificados nos últimos dois minutos, em vez de arquivos ( -type f
). Canalizar a saída de -ls
to grep
normalmente teria pesquisado os nomes dos arquivos gerados por mystring
. No entanto, neste caso, o -R
sinalizador altera o comportamento grep
e ignora sua lista de nomes de arquivos, pesquisando em cada arquivo no diretório atual e abaixo dele.
Então, vamos dividir o problema em duas partes
Pesquise os últimos arquivos modificados nos últimos 2 minutos em seu diretório inicial
find ~ -type f -mmin -2
[Arquivos] que contêm uma determinada String
grep -Fl 'certain String' {files...}
Agora você precisa colocá-los juntos. O {}
é um espaço reservado para os nomes de arquivos gerados pela find
etapa 1 e o final +
indica que {}
pode ser repetidovárias vezes, ou seja, vários nomes de arquivos
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Alterar grep
para echo grep
mostrará o que está sendo executado pelo find
comando; esta pode ser uma técnica de depuração útil:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Por favor, considere correr man find
e man grep
descobrir quais são as várias opções, como o -F
e -l
em grep -Fl
, caso contrário você não aprenderá nada com o exercício que lhe foi definido; você está apenas copiando uma resposta.
Responder2
Na zsh
casca:
grep -l -F -i 'string' ~/**/*(.Dmm-2)
... onde **
corresponde recursivamente em subdiretórios e onde .D
in (.Dmm-2)
significa "corresponde apenas a arquivos normais ( .
), mas inclui arquivos ocultos ( D
)" e onde mm-2
significa "modificado nos últimos dois minutos".