find
いくつかのファイルを見つけて、すべてのファイルをファイル間にカスタム区切り文字を含む単一行(改行なし)として返すために使用したいと思います。
たとえば、3つのファイルの結果は次のようになります。
/my/file/1::/my/file/2::/my/file/3
変える
/my/file/1
/my/file/2
/my/file/3
標準のUnixツールを組み合わせてこれを達成する方法はありますかfind
?
ベストアンサー1
find
とのGNU実装では、次のことがsed
できます。
find . -type f -printf '%p::' | sed '$s/::$/\n/'
-printf
GNUの述語は、find
で区切られた1行でファイル名を印刷し、最後の行の::
最後sed
の行(ここでは制限なし)を改行文字に置き換えます。::
例:
$ find . -type f -printf '%p\n'
./foo
./test file
whose name
contains newline characters and ::
./bar
$ find . -type f -printf '%p::' | sed '$s/::$/\n/'
./foo::./test file
whose name
contains newline characters and ::::./bar
-printf '%p::'
is と同等の標準です。 POSIXはテキスト以外のものを処理できないため、-exec printf '%s::' {} +
このGNUsed
式には同等のものはありません。sed