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

发布于 2024-11-07 08:53:12 字数 366 浏览 0 评论 0原文

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

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

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

我想动态地执行此操作。

ls -d ../*test* 

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

问题:

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

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

We use phpDocumentator to document our php code.
The php code is in different dictionaries.
The script which runs the phpDocumentator looks like this:

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

Every time we add a new directory, I have to add this one to the script.

I would like to do this dynamically.

ls -d ../*test* 

this lists all needed directories but space separated and not comma separated.

Question:

How can I list the directories comma separated?

how can I add this list as -d parameter to the phpdoc script?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

走过海棠暮 2024-11-14 08:53:12

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

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

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

Use ls -dm */ to generate a comma-separated list of directories. -d will return directories only and -m will output to a comma-separated list.

You could then store the output in a variable and pass it along as an argument:

#!/bin/bash
MY_DIRECTORY=/some/directory
FOLDERS=`ls -dm $MY_DIRECTORY/*/ | tr -d ' '`
phpdoc -d $FOLDERS
潦草背影 2024-11-14 08:53:12

这是使用 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"

Here is simpler way using find and paste:

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

and the same, but using absolute paths:

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

and version with tr:

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

Above will scan folders recursively, unless you'll add -maxdepth 1 to list only one level deep.

then run phpdoc as:

./phpdoc -d "$dirs"
溺渁∝ 2024-11-14 08:53:12

无需调用外部程序(假设 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(除非不需要转义 /)。

No need to call an external program (assuming bash or ksh93):

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

See @mklement0's comment below. The problem with this solution is that it will find filenames as well as directories, therefore:

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

The solution involving expansion on all array elements is @mklement0's (except there is no need to escape the /).

原谅我要高飞 2024-11-14 08:53:12
./phpdoc -d $(ls -dm ../*test* | tr -d ' ')
./phpdoc -d $(ls -dm ../*test* | tr -d ' ')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文