Добавьте пробел между путями к файлам

Добавьте пробел между путями к файлам

У меня есть список папок, и внутри каждой папки есть файл "file.txt", который имеет одинаковое имя во всех папках. Я хотел собрать путь к этому файлу из всех папок и сохранить его в текстовом файле. Для этого я выполнил следующую команду в родительской папке:

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

Эта команда сохранила все пути к этому файлу из всех папок в файле "path.txt" следующим образом:

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
.
.
.
.

Как создать пробел между строками в файле «path.txt», чтобы он отображался следующим образом:

/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 ...

решение1

Еще один способ, предполагающий использование GNU find(1), просто ради забавы:

find $PWD -type f -name "file.txt" -printf '%p '

решение2

Вы можете заменить символ LF на пробел с помощью команды «tr».

tr '\012' ' ' < path.txt

Это может быть частью исходной команды:

find $PWD -type f -name "file.txt" | tr '\012' ' ' > paths.txt

решение3

Одним из простых способов было бы передать findвывод по конвейеру xargs(действие по умолчанию которого, если явно не задана команда, заключается в выводе его аргументов)

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

В отличие от простой замены всех новых строк пробелами, здесь сохраняется конечный новый символ.

решение4

pasteВы также можете использовать

find . -type f -name "path.txt" -exec paste -d' ' -s {} \; > path.txt

Связанный контент