忍者ブログ

STEP UP BLOG

Home > ブログ > > [PR] Home > ブログ > Linux > 再帰的にファイルだけ権限を変えたいとき

再帰的にファイルだけ権限を変えたいとき

よくある作業で、あるディレクトリ以下のファイルの権限を全部変えたいときがあります。
そんなときに例えば以下のように
$ chmod -R 777 .

としてしまいがちです。
Enterキーを押してしまった人、ごめんなさい〜
これだと、ディレクトリの権限まで変わってしまいます。
私はファイルだけ権限を変えたかったんだ…
再帰的といいつつ、ファイルだけにchmodを適用したい。
そんなときはUnixお得意のパイプ処理です。
というわけで、ファイルだけ再帰的に権限を変更したい場合は以下。
$ find . -type f | xargs chmod 777

findの-typeオプションでファイルのみを絞って、それをxargsでchmodに渡します。
xargsを使うところが肝です。
man xargsしてみると、
名前
       xargs - 標準入力からコマンドラインを作成し、それを実行する

書式
       xargs   [-0prtx]   [-e[eof-str]]   [-i[replace-str]]   [-l[max-lines]]   [-n   max-args]   [-s   max-chars]  [-P  max-procs]  [--null]  [--eof[=eof-str]]
       [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive] [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs] [--max-args=max-
       args] [--no-run-if-empty] [--version] [--help] [command [initial-arguments]]

説明
       このマニュアルページは GNU 版 xargs に関して記述したものである。 xargs はまず標準入力から空白または改行で区切られた文字列群を読み込む (空白はダブルクォー
       テーション・シングルクォーテーション・バックスラッシュによってプロテクトできる)。そして command (デフォルトは /bin/echo) に文字列群を続けたコマンドライン
       を実行する。 initial-arguments が指定されていれば、 command と標準入力から渡された文字列の間に、 command への引き数として渡される。標準入力の空行は無視さ
       れる。

つまり今回の場合はパイプで送られてきたファイル一覧を引数としてchmodを実行してくれます。
なるほど!
パイプを使うとunix使いこなせてる感マシマシになるので頭の片隅にでも留めておいてはいかがでしょうか。

ちなみに
$ find . -type d

だと、ディレクトリのみが抽出されます。
PR

Comment0 Comment

Comment Form

  • お名前name
  • タイトルtitle
  • メールアドレスmail address
  • URLurl
  • コメントcomment
  • パスワードpassword

PAGE TOP