の続き。
ディレクトリーにだけ実行属性を与える方法として次の方法を紹介した。
$ 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