Como manipular espaços em nomes de diretório usando o grep

0

Eu tenho uma árvore de diretórios onde alguns dos diretórios têm espaços nos nomes:

top
|-- subdir 1
    |-- subdir a
        |-- file1.csv
        |-- file2.csv
    |-- subdir b
        |-- file1.csv
    |-- subdir c
        |-- file3.csv

Eu quero escrever um comando grep para encontrar recursivamente texto na estrutura de diretórios, mas a saída deve ser classificada de acordo com o registro de data e hora dos arquivos. O fechamento que eu recebi é isso:

find . -name *.csv | sort | xargs grep "some text" -0

O problema é que os espaços estão jogando fora grep e você obtém resultados como

grep: ./subdir: No such file or directory
grep: 1: No such file or directory

Ele está interpretando subdir 1 como dois diretórios separados, subdir e 1 . Como posso fazer isso?

    
por user1334007 30.08.2018 / 17:19

1 resposta

0

Sim, esses espaços são o problema. Se as ferramentas que você usa puderem funcionar com strings terminadas em null, esta é a maneira:

find . -name "*.csv" -print0 | sort -z | xargs -0 grep "some text"

Essa abordagem também deve funcionar no seu caso:

find . -name "*.csv" | sort | xargs -I {} grep "some text" {}

Notas:

  • Eu não sei como esse sort torna "a saída classificada de acordo com o registro de data e hora dos arquivos". Estou apenas depurando seu comando.
  • Você precisa citar *.csv como eu fiz para evitar este cenário .
por 30.08.2018 / 17:42

Tags