Tenho uma lista de pastas e dentro de cada pasta tenho o arquivo "arquivo.txt" que tem o mesmo nome em todas as pastas. Eu queria coletar o caminho desse 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” conforme 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 apareça 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 ...
Responder1
Mais uma forma, assumindo GNU find(1)
, apenas por diversão:
find $PWD -type f -name "file.txt" -printf '%p '
Responder2
Você pode substituir o caractere LF por um espaço usando o comando 'tr'
tr '\012' ' ' < path.txt
Isso pode fazer parte do comando original:
find $PWD -type f -name "file.txt" | tr '\012' ' ' > paths.txt
Responder3
Uma maneira simples seria canalizar a find
saída xargs
(cuja ação padrão quando nenhum comando explícito é fornecido é repetir 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.
Responder4
paste
Você também pode usar
find . -type f -name "path.txt" -exec paste -d' ' -s {} \; > path.txt