如何在Unix上用逗号查找所有文件和单独的结果?

Lan*_*ard 4 unix bash shell

我想从标准find输出,即:

path/to/file1.yaml
path/to/file2.yaml
path/to/file3.yaml
Run Code Online (Sandbox Code Playgroud)

对此:

path/to/file1.yaml,path/to/file2.yaml,path/to/file3.yaml
Run Code Online (Sandbox Code Playgroud)

从命令行执行此操作最简单的方法是什么?

我试过这些东西:

find . -path '*.yaml' | sed -e 's/\s/,/g'
find . -path '*.yaml' -print0 | sed -e 's/ /,/g'
Run Code Online (Sandbox Code Playgroud)

但似乎没有用.

Joh*_*024 10

以下是使用逗号分隔文件名的一种方法:

find . -path '*.yaml' | tr '\n' ','
Run Code Online (Sandbox Code Playgroud)

如果文件名不包含空格,则另一种方法是:

IFS=, echo $(find . -path '*.yaml')
Run Code Online (Sandbox Code Playgroud)

在评论中,小次郎提出了保留空白的第三种方法:

find . -path '*.yaml' -print0 | tr '\0' ,
Run Code Online (Sandbox Code Playgroud)

由于文件名中允许使用换行符和逗号,因此这种格式可能会导致混淆.只有在您知道文件的合理命名时才应使用此格式.


sou*_*ser 10

这也将起作用:

  find . -path '*.yaml' | paste -s -d ',' -
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢它不会像“tr”和“print”方法那样产生尾随逗号。 (4认同)
  • 也允许稍短的版本:`find 。-path '*.yaml' | 粘贴-sd,` (2认同)