5

我正在寻找自动化我的 xcode 项目。除了带有空格的项目名称外,一切正常。我尝试了以下命令:

output_apps=`find ./ -name "*.app" -print`
output_apps=`find ./ -name "*.app"`

当我跑

find ./ -name "*.app" -print 

如果不存储到变量中,它会按预期给我输出,如下所述:

.//Ten EU.app
.//Ten Official App EU.app
.//Ten Official App.app
.//Ten.app

但是,当我将上述命令的输出存储在如下变量中时

output_apps=`find ./ -name "*.app" -print`

然后运行以下 for 循环以获取名称

for curr_app in $o
do 
    echo "$curr_app"
done

表明

.//Ten
EU.app
.//Ten
Official
App
EU.app
.//Ten
Official
App.app
.//Ten.app

如何保持每个输出之间的空格并获得以下输出?

Ten EU.app
Ten Official App EU.app
Ten Official App.app
Ten.app
4

2 回答 2

15

如果您不需要将文件名存储在变量中,则可以find -print0xargs -0. 这用 NUL 字节而不是换行符分隔找到的条目。xargs读取这些 NUL 分隔值并使用尽可能多的参数调用一些命令。

find ./ -name "*.app" -print0 | xargs -0 some-command

如果你愿意,你可以限制给some-commandwith的参数数量xargs -n 1

find ./ -name "*.app" -print0 | xargs -0 -n 1 some-command

另一种方法是使用while循环读取文件

find ./ -name "*.app" -print | while read f; do
    some-command "$f"
done

这一次调用一个带有一个文件的命令。重要的一点是用双引号括$f起来。

于 2013-01-10T00:11:32.770 回答
1

文件名可能包含空格。您需要通过 find 要求将它们分开NULL(\0)。使用find -print0.

于 2013-01-09T23:03:55.157 回答