ディレクトリにだけchmod

ディレクトリにだけ指定したグループに実行権限を与えたいことがあるが、何も考えずに

chmod -R g+x ./

などとやると、ファイルにも実行権限が付与されてしまって嫌な感じになってしまう。

そこでfind+xargsを使う。

find ./ -type d -print0 | xargs -0 chmod g+w

とすれば、ディレクトリだけを抽出して、それらに対してchmodを適用してくれる。

findとxargsのそれぞれのオプションの-print0と-0はおまじないみたいなもの。findは通常だと抽出結果をスペース区切りで返しxargsもそのように想定しているが、これだとファイル名にスペースが入っているとxargsがそこもデータの区切りと認識してしまい、おかしなことになってしまう。

オプションに-print0と-0を指定することでヌル文字を区切り文字として使うようになり、こういった問題を避けることができる。

しょっちゅう忘れるので自分のためにメモ。