以逗号分隔所有目录并将输出发送到其他脚本

时间:2011-05-13 12:21:37

标签: linux bash

我们使用phpDocumentator来记录我们的PHP代码。 php代码在不同的词典中。 运行phpDocumentator的脚本如下所示:

./phpdoc -d dir1,dir2,dir3,dir4 

每次添加新目录时,都必须将此目录添加到脚本中。

我想动态地这样做。

ls -d ../*test* 

这列出了所有需要的目录,但是空格分隔而不是逗号分隔。

问题:

如何列出逗号分隔的目录?

如何将此列表作为-d参数添加到phpdoc脚本?

4 个答案:

答案 0 :(得分:33)

使用ls -dm */生成以逗号分隔的目录列表。 -d仅返回目录,-m将输出到以逗号分隔的列表。

然后,您可以将输出存储在变量中并将其作为参数传递:

#!/bin/bash
MY_DIRECTORY=/some/directory
FOLDERS=`ls -dm $MY_DIRECTORY/*/ | tr -d ' '`
phpdoc -d $FOLDERS

答案 1 :(得分:5)

无需调用外部程序(假设使用bash或ksh93):

var=(../*test*)
IFS=','
phpdoc -d "${var[*]}"

请参阅下面的@ mklement0评论。这个解决方案的问题是它会找到文件名和目录,因此:

var=(../*test*/)            # trailing / ensures directories only
IFS=','
phpdoc -d "${var[*]/%/}"    # remove the trailing / from the names

涉及扩展所有数组元素的解决方案是@ mklement0(除了没有必要转义/)。

答案 2 :(得分:4)

以下是使用findpaste的简单方法:

dirs=$(find . -type d | paste -d, -s)

并且相同,但使用绝对路径:

dirs=$(find "$PWD" -type d | paste -d, -s)

以及tr的版本:

dirs=$(find . -type d -print0 | tr '\0' ',')

上面将递归扫描文件夹,除非您添加-maxdepth 1仅列出一个级别。

然后运行phpdoc

./phpdoc -d "$dirs"

答案 3 :(得分:1)

./phpdoc -d $(ls -dm ../*test* | tr -d ' ')