У меня есть список папок, и внутри каждой папки есть файл "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