a linha de comandos grep * não funciona, mas grep *. trabalho

3

Como é que "staff * 22" não mostra nada enquanto "staff. * 22" lista linhas que contêm staff seguido por 22, embora nenhuma das linhas contenha "." neles?

$ ls -l | grep "staff*22"
$ ls -l | grep "staff.*22"
drwxrwxr-x  2 kim  staff   68 Jan 12 22:23 hihi
drwxrwxrwx  4 kim  staff  136 Jan 12 22:29 temp2
drwxrwxrwx  3 kim  staff  102 Jan 12 22:41 tes2
    
por Mint.K 17.01.2017 / 00:33

1 resposta

3

O que os comandos grep fazem

Da sua saída, é evidente que você deseja localizar todos os arquivos que pertencem ao grupo "equipe" e criados na hora 22 (ou 22h no formato de 12 horas). Abordaremos isso abaixo, mas primeiro vamos descobrir o que seus comandos grep fazem e por que eles não são a ferramenta certa para o que você deseja.

Primeiro de tudo, os dois comandos grep que você faz são ligeiramente diferentes na forma como eles são interpretados, e sua abordagem não é adequada - você não deve tentar parse a saída de ls .

  • grep "staff*22" lê como "combina todas as linhas que começam com 'staf' e pode ou não ter nelas extra 'f', seguido imediatamente por '22'."

    $ echo "staff whatever 22" | grep 'staff*22'               
    $ echo "staff22" | grep 'staf*22'                          
    staff22
    $ echo "staf22" | grep 'staff*22'                         
    staf22
    $ echo "staf22" | grep 'staff*22'
    staf22
    
  • grep "staff.*22" lê como "corresponde a todas as linhas que possuem 'equipe' nelas, zero ou mais caracteres entre (qualquer tipo de caractere) e número 22".

    $  echo "staff whatever 22" | grep 'staff.*22'                                                                           
    staff whatever 22
    

Melhor abordagem

O comando

ls em geral só deve ser usado para listagem interativa, ou seja, quando você quiser apenas dar uma olhada rápida no que está dentro de uma pasta. Quando for necessário encontrar arquivos específicos ou algum tipo de trabalho com esses arquivos via script, o comando find é o caminho a seguir. Ele tem -group variable, que ajudará a isolar todos os arquivos que pertencem ao staff group e -nevermt para localizar arquivos com tempo de modificação mais recente do que uma data específica. Por exemplo, o que você quer é provavelmente isso:

find . -group staff -newermt "2017-01-12 21:59:59" 

Veja também: link

    
por Sergiy Kolodyazhnyy 17.01.2017 / 00:58