Como redirecionar uma lista de caminhos legíveis por humanos para outro comando?

2

Ao trabalhar com a saída de comandos como locate , que produz listas de caminhos em "formato legível por humanos" (isto é, sem \ na frente dos espaços), como você redireciona sua saída para outro comando?

A saída de $ locate [something] produz caminhos com espaços neles, o que impede que outros programas usem os caminhos no caso de conterem espaços. Por exemplo, se eu fosse para

$ du -h 'locate *.doc'

isso produzirá um erro em todos os arquivos e diretórios que contiverem espaços. (Enrolar os carrapatos em espaços não funciona)

    
por rien333 24.04.2017 / 23:17

1 resposta

4

Qual é o motivo específico pelo qual você está usando locate ? Isso parece fazer o que você pediu:

find . -type f -name '*doc' -exec du -h "{}" \;

Dito isto, se você realmente quiser usar uma ferramenta como locate ou find e passar sua entrada como parâmetros para outro programa, você pode se valer do limite NUL saída e entrada que algumas ferramentas fornecem. locate e find têm uma opção ( locate -0 e find -print0 ) que permite ter uma saída mais programática, que xargs foi projetada para ler com o argumento its -0 :

find . -type f -name '*doc' -print0 | xargs -0 du -h

locate -0 '*doc' | xargs -0 du -h
    
por 24.04.2017 / 23:29