[英]Bash Script - store find command output without spaces in variable
我希望自動化我的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
如果您不需要將文件名存儲在變量中,則可以將find -print0
與xargs -0
結合使用。 這會將找到的條目與NUL字節而不是換行符分開。 xargs
讀取這些NUL分隔值,並使用盡可能多的參數調用一些命令。
find ./ -name "*.app" -print0 | xargs -0 some-command
如果需要,可以使用xargs -n 1
限制給some-command
的參數個數
find ./ -name "*.app" -print0 | xargs -0 -n 1 some-command
另一種方法是使用while
循環讀取文件
find ./ -name "*.app" -print | while read f; do
some-command "$f"
done
這會一次調用一個文件。 重要的是將$f
括在雙引號中 。
文件名可以包含空格。 你需要讓find通過NULL(\\0)
分隔它們。 使用find -print0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.