ファイルパス間にスペースを追加する

ファイルパス間にスペースを追加する

フォルダーのリストがあり、各フォルダー内にはすべてのフォルダーで同じ名前のファイル「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

'tr'コマンドを使用してLF文字をスペースに置き換えることができます。

tr '\012' ' ' < path.txt

これは元のコマンドの一部になる場合があります:

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

答え3

find簡単な方法の1つは、出力をパイプすることです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

関連情報