2008-11-07

ディレクトリーにだけ実行属性を付けたい (空白を含むパスへの対処)

の続き。

ディレクトリーにだけ実行属性を与える方法として次の方法を紹介した。

$ find foo/ -type d | xargs chmod o+x

このやり方だと、ディレクトリーのパスに「空白」や「改行」を含む場合に失敗する。「空白」を引数の区切り文字として、「改行」をコマンドの終わりとして認識するのが原因。パスに(特に)「空白」を含めること自体、Unix 使いとして終わってる気がするけれど、Samba なんかで Windows ユーザーと共有しているとかういふことになりやすい。

で、xargs の man を読むとこうあった。

Because Unix filenames can contain blanks and newlines, this default behaviour is often problematic; filenames containing blanks and/or newlines are incorrectly processed by xargs. In these situations it is better to use the `-0' option, which prevents such prob- lems. When using this option you will need to ensure that the program which produces the input for xargs also uses a null character as a separator. If that program is GNU find for example, the `-print0' option does this for you.

-0 オプションを使う。更に、find コマンドでは -print0 オプションを併用しないといけない。

つまり、こう書くと問題は解決する。

$ find foo/ -type d -print0 | xargs -0 chmod o+x

No comments:

Post a Comment