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 -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

これは、一度に 1 つのファイルでいくつかのコマンドを呼び出します。$f重要な点は、を二重引用符で囲むことです。

于 2013-01-10T00:11:32.770 に答える
1

ファイル名にはスペースを含めることができます。を介してそれらを分離するためにfindに依頼する必要がありますNULL(\0)。を使用しfind -print0ます。

于 2013-01-09T23:03:55.157 に答える