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