ファイルの所有者を再帰的に変更しますが、ディレクトリは変更しません


14

〜50k個のディレクトリと〜1m個のファイルがあるディレクトリがあります。

ディレクトリではなく、すべてのファイルの所有者(または許可)を変更したい。これは、リモートサーバーから追加ファイルをSCPしようとしているためです(〜15万のディレクトリと〜3.6mのファイル)。

私が持っているディレクトリはリモートディレクトリの一部ですが、scpは失敗しました...

SCPを再度実行すると、リモートディレクトリから既にコピーしたファイルを上書きして、最初からやり直します。

回答:


20

を使用できますが、プロセスでトリガーされないfindという追加の利点がARG_MAXあります。親ディレクトリから:

find . -type f -exec chown newowner {} +

のためにchmod

find . -type f -exec chmod 644 {} +

-type ffindファイルのみ。


1
本当に素晴らしい作品です!ありがとう!chmodとchownの両方に+1
マーカスブランステン

2
だから、findトリガーされませんかARG_MAX?私はいつもそうだと思っていました。あなたは常に何かを学ぶ:)
コス

5

別の選択肢はを使用することxargsです。次の-print0オプションとfindそれに対応する-0オプションを使用する必要がありますxargs

find . -type f -print0 | xargs -0 chown newuser:newgroup

からman find

-print0

標準出力に完全なファイル名を出力し、その後にヌル文字を続けます。これにより、改行または他の種類の空白含むファイル名が、検索出力を処理するプログラムによって正しく解釈されます。このオプションは、xargsの-0オプションに対応しています。

xargsも正しく処理しARG_MAXます。


2
find..exec奇妙なファイル名を処理します。
heemayl

1
@heemayl私はいくつかのテストを実行しましたが、あなたは正しいようです。私は訂正します。それを指摘していただきありがとうございます、私は私の答えを更新しました。
AP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.