あるユーザーに属するすべてのファイルを別のユーザーに変更するにはどうすればよいですか?


39

特定のユーザー(できればターゲットディレクトリ)に属するすべてのファイルの所有権を別の指定されたユーザーに変更できるLinuxコマンドを探しています。

私の夢のコマンドは次のようになります...

chuser -R --olduser tom --newuser jerry

または

chuser -R --olduser 1066 --newuser 1492

これが私のシナリオです...ユーザーとグループの情報が保存されたバックアップファイル(.tgz)があります。ApacheとMySQLを実行しているWebサーバーから取得されました。バックアップ内のファイルはシステム全体からのものであり、複数の異なるユーザーおよび複数のシステムタイプのアカウントからのファイルが含まれており、新しいサーバーに復元したときに設定が失われないことが重要です。問題は、ファイルを復元するマシン上のユーザーが、バックアップファイル内のユーザーと一致しないことです。たとえば、両方のマシンにMySQLユーザーがありましたが、ユーザーIDが異なり、異なるユーザーに属する両方のマシンにいくつかのユーザーIDがありました。これは、新しいマシンのユーザーを古いマシンのユーザーに同期する方法がないことを意味します。

このような検索コマンドですべてのユーザーファイルを見つけることができます...

find /decompressed-backup-dir -uid 1050

または

find /decompressed-backup-dir -user tom

私が疑うように、単一のコマンドで必要なことを行う方法がない場合は、おそらくfindコマンドの結果を別のコマンドにパイプして所有権の変更を処理する方法がありますか?

私はPHPスクリプトでこれを行うことができますが、バックアップには4GBと数万のファイルがありますので、PHPやPerlを使用したくないのですが、それを処理できるシェルスクリプトで満足です。

回答:



65

chownコマンドの--fromフラグがおそらく最も簡単な方法だと思います。

chown --from=oldguy newguy * -R

3
最高のソリューション、それを愛する必要はありません
トビアスハーゲンベーク14

2
最適なソリューション
カールフォーナー

1
OS Xでは、brew install coreutilsとでこれを行うことができますgchown
-jomo

これが正しい最良の答えです。
ジョージM

私は確認し、ベストアンサーとしてマークする必要があります。
-Soullivaneuh

7

追加SiteKickrによって答えchgrp持っていない--from引数を、しかし、あなたが同じことを達成することができchown、ユーザを省略することによって。

例:

chown -R --from=:currentgroup :newgroup /some/directory

6

あなたは使用することができfindませんし、他に掲載いくつかの一つとして、chown

しかし、あなたはtarあなたのために物事の世話をするようにする必要はありません。

あなたが作るたとえば、tar上のmachine Aユーザーがどこtomuid 500当時とuntar上のファイルmachine B、ユーザーがどこtomuid 505tar正しいことを行うとが所有するファイルを作成しますuid 505


おもしろいことに、私はこれを知りませんでした。したがって、tarはuidだけでなく、uidに関連付けられた名前も格納します。
ニチョリ

3
元のtar形式には数値情報のみが保存されていました。80年代後半にPOSIXによって導入されたUStar形式は、名前を追加します。したがって、最近出会ったタールはほとんど正しいことをしています。
チクラミノ

1

答えは、ユーザーとグループの両方を設定します。

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

しかし、あるユーザーに属するファイルのグループのみを変更したい場合は使用できませんchown(私が知る限り)が、代わりに使用しますchgrp

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

そして、あなたが使用しなければならないいくつかのグループに属するファイルの唯一のグループを変更するために、例えば:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

知識を追加するだけです。


1
実際には、newuser一部を省くことができます。マニュアルページには、「コロンとグループが指定されているが、所有者が省略されている場合、ファイルのグループのみが変更されます。この場合、chownと同じ機能を実行しchgrpます。」
ベンフォイト14

0

同じ/etc/passwdユーザーに解決される古い/新しい所有権ID再帰的にマッピングする必要がある場合は、

(LDAPをサーバーに導入し、/etc/passwd各ユーザーとグループのエントリが重複している場合に発生する可能性があります)、

私が書いたこのスクリプトを使用できます:https : //gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544

独自にマッピングを作成します。残念ながら、プログラムのインターフェースはコード内にあります。実行方法を調査する必要がある場合は、デバッグステートメントを追加します。しかし、それはほとんどが、の重複から作成されたマッピングを備えた美化された衣装/etc/passwdです。これが誰にとっても有用であれば、それは本当にクールです。:)


-2

使用できます chown - R /directory/file

このコマンドは、ディレクトリのすべてのインスタンスの権限を変更します chown - R /directory

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.