Adiciona espaço entre os caminhos dos arquivos

4

Eu tenho uma lista de pastas e dentro de cada pasta eu tenho o arquivo "file.txt" que tem o mesmo nome em todas as pastas. Eu queria coletar o caminho para este arquivo de todas as pastas e salvá-lo em um arquivo de texto. Para fazer isso, executei o seguinte comando na pasta pai:

find $PWD -type f -name "file.txt" > paths.txt

Este comando armazenou todos os caminhos para este arquivo de todas as pastas, no arquivo "path.txt" como segue:

a/b/c/1/file.txt
a/b/c/2/file.txt
a/b/c/3/file.txt
a/b/c/4/file.txt
a/b/c/5/file.txt
a/b/c/6/file.txt
a/b/c/7/file.txt
.
.
.
.

Como posso criar espaço entre as linhas no arquivo "path.txt" para que ele possa ser exibido da seguinte forma:

/a/b/c/1/file.txt /a/b/c/2/file.txt /a/b/c/3/file.txt /a/b/c/4/file.txt /a/b/c/5/file.txt /a/b/c/6/file.txt /a/b/c/7/file.txt ...
    
por Gilles 24.06.2016 / 17:36

5 respostas

3

Você também pode aproveitar o fato de que o shell remove novas linhas das substituições de comandos. Então, ao invés de find $PWD -type f -name "file.txt" > paths.txt , você pode fazer (note que você não precisa do $PWD , é o valor padrão para find ):

echo $(find $PWD -type f -name "file.txt") > paths.txt

ou

printf '%s ' $(find $PWD -type f -name "file.txt") > paths.txt
    
por 24.06.2016 / 20:02
7

Mais uma forma, assumindo o GNU find(1) , apenas por diversão:

find $PWD -type f -name "file.txt" -printf '%p '
    
por 24.06.2016 / 17:56
5

Você pode substituir o caractere LF por um espaço usando o comando 'tr'

tr '2' ' ' < path.txt

Isso pode fazer parte do comando original:

find $PWD -type f -name "file.txt" | tr '2' ' ' > paths.txt
    
por 24.06.2016 / 17:43
4

Uma maneira simples seria enviar a find output através de xargs (cuja ação padrão quando nenhum comando explícito é dado é para ecoar seus argumentos)

find $PWD -type f -name "file.txt" | xargs > paths.txt

Ao contrário de simplesmente substituir todas as novas linhas por espaços, isso preserva a nova linha final.

    
por 24.06.2016 / 17:44
3

Você também pode usar paste

find . -type f -name "path.txt" -exec paste -d' ' -s {} \; > path.txt
    
por 24.06.2016 / 17:53