如何将查找输出中的文件名组合成字符串

如何将查找输出中的文件名组合成字符串

使用find它来查找具有特定模式的所有文件很简单:

find . -name \*.jar

如何将该命令的结果(例如所有文件名)合并到一个由 分隔的字符串中:

预期结果将类似于:

"./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}

相关内容