ファイルだけ・ディレクトリだけ、パーミッションを変更したい [小技(Linux)]
習うより慣れろfindコマンド応用術
chown -R みたいに、chmodにも-Rオプションがあったりしますが、実はコイツがビミョーに使いづらかったりするんですよね。
例えば、パーミッションが「drwxr-xr-x」というディレクトリが沢山あるとして、オーナーでもグループメンバーでもない人のそのディレクトリへの立ち入りを禁止したいという場合に、それを再帰的に実行したいなーとかいうケース。
chmod o-x somewhere
(「somewhere」はどこかのディレクトリ)と実行すれば、ひとまずそのディレクトリから「x」が取り除かれるのである。よって、再帰的に実行したいなら、「-R」をつければいいし、カレントディレクトリに複数あるなら「*」と指定したくなる。
chmod -R o-x ./*
とか、実行したくなる気持ちは理解できる。
が、これでは痛い目にあう可能性があることに気が付くだろうか。
もしそこに…
実行可能なファイル(コマンドやスクリプト)が含まれていたら、なにか余計なことをしでかす予感がしないだろうか。(笑)
こんなケースでもfindコマンドが役に立つ。
「ディレクトリだけターゲットにしたい」なら…
find /some-directory -type d -exec chmod o-x {} \;
と、なる。これでディレクトリだけが処理の対象になるし、「ファイルだけターゲットにしたい」なら…
find /some-directory -type f -exec chmod o-x {} \;
と、いうことに。
ちなみに、前アーティクルの「特定のオーナーの…」という条件を組み合わせることも可能で、
find /some-directory -type f -user someOwner -exec chmod o-x {} \;
と、これで「オーナーがsomeOwner」のファイルだけchmodする…ということが可能になる。
もちろん、「-maxdepth」とかも組み合わせることができる。
chown -R みたいに、chmodにも-Rオプションがあったりしますが、実はコイツがビミョーに使いづらかったりするんですよね。
例えば、パーミッションが「drwxr-xr-x」というディレクトリが沢山あるとして、オーナーでもグループメンバーでもない人のそのディレクトリへの立ち入りを禁止したいという場合に、それを再帰的に実行したいなーとかいうケース。
chmod o-x somewhere
(「somewhere」はどこかのディレクトリ)と実行すれば、ひとまずそのディレクトリから「x」が取り除かれるのである。よって、再帰的に実行したいなら、「-R」をつければいいし、カレントディレクトリに複数あるなら「*」と指定したくなる。
chmod -R o-x ./*
とか、実行したくなる気持ちは理解できる。
が、これでは痛い目にあう可能性があることに気が付くだろうか。
もしそこに…
実行可能なファイル(コマンドやスクリプト)が含まれていたら、なにか余計なことをしでかす予感がしないだろうか。(笑)
こんなケースでもfindコマンドが役に立つ。
「ディレクトリだけターゲットにしたい」なら…
find /some-directory -type d -exec chmod o-x {} \;
と、なる。これでディレクトリだけが処理の対象になるし、「ファイルだけターゲットにしたい」なら…
find /some-directory -type f -exec chmod o-x {} \;
と、いうことに。
ちなみに、前アーティクルの「特定のオーナーの…」という条件を組み合わせることも可能で、
find /some-directory -type f -user someOwner -exec chmod o-x {} \;
と、これで「オーナーがsomeOwner」のファイルだけchmodする…ということが可能になる。
もちろん、「-maxdepth」とかも組み合わせることができる。
コメント 0