検索出力のファイル名を文字列に結合する方法

検索出力のファイル名を文字列に結合する方法

これを使用して、find特定のパターンを持つすべてのファイルを見つけるのは簡単です。

find . -name \*.jar

このコマンドの結果(すべてのファイル名など)を1つの別々の文字列に結合するにはどうすればよいですか:

予想される結果は次のようになります。

"./foo.jar:./bar.jar"

お世話になっておりますので、よろしくお願いします。

答え1

find . -name \*.jar -printf '%P:'

答え2

find . -name \*.jar | tr '\n' ':'

答え3

find . -name '*.jar' | paste -sd : -

ただし、この方法は、ファイルまたはディレクトリ名に改行文字が含まれていると正しく機能しません。

この問題を解決するには、GNUシステムで次のものを使用できます。

find . -name '*.jar' -print0 | paste -zsd: | tr '\0' '\n'

もちろん、ファイルやディレクトリ名に文字が含まれている場合はスキップするように:指示できますが、できることはあまりありません。find

LC_ALL=C find . -name '*:*' -prune -o -name '*.jar' -print0 |
  paste -zsd: | tr '\0' '\n'

そしてzsh

set -o extendedglob # best in ~/.zshrc
jar_files=(**/*.jar~*:*(ND))
printf '%s\n' ${(j/:/)jar_files}

関連情報