xargs で -0 を使わずに find の出力を渡す

POSIXの xargs には -0 オプションがないので find で得たファイル名に空白などがあった場合に面倒が生じます。そのため、find の出力を加工します。

註: あまり試してない

$ find .//. -print \
    |sed -n ':loop;s/./\\&/g;${p;q};x;n;/\/\//!{x;s/.*/&\\/;x};x;p;x;b loop' \
    |xargs -E "" command... 

「find ... -print0 |xargs -0」の時と変えることは、パスの先頭に「.//」を付けること、find と xargs の間に sed スクリプトを挟むことです。

find が出力するディレクトリの区切りは「/」1個だけというのを利用し、「今の行に『//』が含まれていない場合は前の行の続きだから前の行の最後に『\』をつける」という処理を施しています。

処理は http://programming.itags.org/unix-linux-programming/82599/ の stephane_chazelas 氏の投稿を参考にしました。awk が使われていますが、ここでしていることと同じです。

sedスクリプトの解説はめんどいというか、自分でも苦戦したのでパスで……。