我希望自动化我的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
答案 0 :(得分:14)
如果您不需要将文件名存储在变量中,则可以将find -print0
与xargs -0
结合使用。这会将找到的条目与NUL字节而不是换行符分开。 xargs
读取这些NUL分隔值,并使用尽可能多的参数调用某些命令。
find ./ -name "*.app" -print0 | xargs -0 some-command
如果您愿意,可以使用some-command
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
括起来double quotes。
答案 1 :(得分:1)
文件名可能包含空格。您需要让find通过NULL(\0)
将它们分开。使用find -print0
。