1

すべてのディレクトリに移動するこのコマンドがあり、そこですべてのファイルに対していくつかのコマンドを実行します。

STDIR=$PWD;
for dir in $(find . -type d 2>&-); do 
    cd "$dir";
    for file in $(find * -prune -type f 2>&-); do 
        command "$file";
    done; 
    cd "$STDIR"; 
done

ただし、ファイルまたはディレクトリの名前にスペースが含まれていると問題が発生します。どうすれば修正できますか?

この質問に答えを適用しようとすると、この疑問が生じます。

編集: 良い解決策もこのコメントに表示されます。スペースの問題を解決するには、追加します

IFS=$'\n'

上記のコードの最初の行の後、および

unset IFS

done

4

3 に答える 3

4

簡単な答えは、いつものように「拡張を引用する」ですが、あなたの場合、正解は次のとおりです。

find . -type f -execdir command {} \; 
于 2012-06-15T16:08:13.287 に答える
3

次の 3 つの方法があります。

1) find -exec (see the answer from Sorpigal)
2) find ... | xargs
3) find ... | while read line ; do command "$line" ; done

3 番目の解決策には利点があります。バリアント (1) および (2) ほど多くのフォークは必要ありません。また、非常に多くの行を処理する必要がある場合、重要になる可能性があります。

于 2012-06-15T16:57:58.180 に答える
2

で使用することをお勧めします。使用find-exec避けてforください。

または、withとNULL文字をwithのように「新しい行」として解釈するプログラムを使用findします-print0xargs--null

于 2012-06-15T16:02:00.883 に答える