Unix 検索結果のカスタム区切り記号

Unix 検索結果のカスタム区切り記号

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/'
  • -printfGNUの述語は、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

おすすめ記事