1. ホーム
  2. unix

ファイルの chmod を変更するが、ディレクトリは変更しない

2023-10-06 11:26:36

質問

私は、すべてのファイルを 664 に再帰的に変更するために chmod を使用する必要があります。私は、フォルダをスキップしたいと思います。 私はこのようなことをすることを考えていた

ls -lR | grep ^-r | chmod 664

これは動作しません、私は私がchmodにパイプすることができないので、私は推測しています。 誰かこれを行うための簡単な方法を知っていますか?

ありがとうございます。

どのように解決するのですか?

A find -exec の答えは良いものですが、ファイルごとに個別のサブプロセスを作成するという、通常は無関係な欠点に悩まされます。しかし、これは完全に機能的であり、ファイルの数が 本当に が大きくなったときだけです。使用方法 xargs を使うと、ファイル名を大きなグループにまとめてから、 そのグループの グループ のサブプロセスを実行します。

ただ、注意しなければならないのは xargs を使用する際に、スペース、改行、その他の特殊文字が埋め込まれたファイル名を適切に処理することに注意してください。

これらの問題の両方を解決する解決策は、(十分にまともな findxargs の実装)。

find . -type f -print0 | xargs -0 chmod 644

-print0find は出力ストリームのファイル名をスペースではなく NUL 文字で終了させ、さらに -0 から xargs に変更することで、入力フォーマットとしてそれを期待することを知らせます。