Bash脚本 - 在变量中存储没有空格的find命令输出

时间:2013-01-09 23:01:06

标签: bash

我希望自动化我的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

2 个答案:

答案 0 :(得分:14)

如果您不需要将文件名存储在变量中,则可以将find -print0xargs -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