100人以上のユーザーとパブリックフォルダを持つ10TB以上のNFS / homeがあります。ユーザーの10人のユーザー名とUIDを変更する必要があります。最初は次のコマンドを実行したかったのです。
find /home -uid 812 -exec chown NEWUSER {} \;
今問題は、10TB全体を一度に処理し、uid 812で見つかったすべてのファイルを私が望むNEWUSERに変更することです。ただし、これはかなり長い時間がかかり、そのユーザーに対してのみ実行されます。これにより、他の9人のユーザーに対してコマンドを再実行する必要があるため、かなり長い時間がかかります*9。
私はスクリプトが好きではないという事実を除いて、スクリプトはここで友達になると想像していますが、どこから始めるべきかわかりません。このfind
コマンドを使用して/ homeのすべてのファイルを確認したいと思います。それから:
IF FILEOWNER IS 813 then NEWOWNER IS NEWUSER1
IF FILEOWNER IS 814 then NEWOWNER IS NEWUSER2
...など。
10GBのデータを10回スキャンせずに一度だけスキャンする方法があると思いますか?
ベストアンサー1
するすべてのこと使用find
。
find /home ! -type l \( \
-uid 812 -exec chown NEWUSER {} + \
-o -uid 813 -exec chown ANOTHER {} + \
-o -uid 814 -exec chown SOMEONE {} + \
-o -uid 815 -exec chown SOMEGUY {} + \)
ディレクトリ構造のナビゲーション。すべてがchown
完了しました。
chown
シンボリックリンクの宛先に適用されるシンボリックリンクは除外されます。一部のシステムでは、 を使用してシンボリックリンクの所有者を変更できますchown -h
。ここに追加し-h
て削除できます! -type l
。
setuid
ファイルのいずれかが混乱してしまいます。これも処理できます。使用find
。
find
重要なのは、ファイルを見つけるのではなく、式を評価することです。はい、find
もちろんファイルを見つけることができますが、実際には副作用だけです。