Tengo una lista de carpetas y dentro de cada carpeta tengo el archivo "file.txt" que tiene el mismo nombre en todas las carpetas. Quería recopilar la ruta de este archivo de todas las carpetas y guardarla en un archivo de texto. Para hacerlo, ejecuté el siguiente comando en la carpeta principal:
find $PWD -type f -name "file.txt" > paths.txt
Este comando almacenó todas las rutas a este archivo desde todas las carpetas, en el archivo "path.txt" de la siguiente manera:
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
.
.
.
.
¿Cómo puedo crear espacio entre las líneas en el archivo "path.txt" para que se muestre de la siguiente manera?
/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 ...
Respuesta1
Una forma más, asumiendo GNU find(1)
, sólo por diversión:
find $PWD -type f -name "file.txt" -printf '%p '
Respuesta2
Puede reemplazar el carácter LF con un espacio usando el comando 'tr'
tr '\012' ' ' < path.txt
Esto puede ser parte del comando original:
find $PWD -type f -name "file.txt" | tr '\012' ' ' > paths.txt
Respuesta3
Una forma sencilla sería canalizar la find
salida xargs
(cuya acción predeterminada cuando no se da un comando explícito es repetir sus argumentos)
find $PWD -type f -name "file.txt" | xargs > paths.txt
A diferencia de simplemente reemplazar todas las nuevas líneas con espacios, esto preserva la nueva línea final.
Respuesta4
paste
También puedes usar
find . -type f -name "path.txt" -exec paste -d' ' -s {} \; > path.txt