【linux】大量のファイルの中から特定のユーザーのファイルを別のユーザーに変更する

例えば「/home/test/file/」直下に10万件弱のファイルがあって、その中のtestuserが所有者のファイル(100件位)の所有者をapacheに変えなければいけないとき。

「chown -R apache:apahce /home/test/file/」で一気に書き換えると時間がかかる(他のユーザーも変わってしまう)し。
なぜこんな状況になってしまったのかは置いておいて、とりあえずメモ。

とりあえずできた。

chown -v apache:apache `ls -dl /home/test/file/* | grep testuser | awk '{ print $9 }'`

まず「chown -v apache:apache」でapacheの所有者に書き換えるんですが、そのファイルリストに

  • lsで対象のディレクトリのファイルを取得
  • grepでtestuserが所有者のファイルのみ絞り込み
  • awkでファイル名のフィールドのみ出力
ということをやって指定しております。

実際には対象のディレクトリが複数あって、シェルスクリプトを組んで以下の様にやりました。

#!/bin/sh

DIR1=/home/test/file

for DIR2 in `ls "$DIR1"`
do
    if test -d "$DIR1"/"$DIR2"
    then
        chown -v apache:apache `ls -dl "$DIR1"/"$DIR2"/* | grep testuser | awk '{ print $9 }'`
    fi
done

とりあえず感想。

ディレクトリの中に対象のファイルが無かったときは「chown: missing operand」って言われてしまいますが。

コメントを残す