Linuxコマンドで、あるディレクトリ配下の特定ユーザのファイルのみを削除する方法
Linuxコマンドで、あるディレクトリ配下の特定ユーザのファイルのみを削除するには、以下のようなコマンドを実行する。
find ディレクトリ名 -user ユーザ名 | xargs rm -f
《例 》カレントディレクトリ内のユーザ「testuser」のファイルを削除するコマンド
find ./ -user testuser | xargs rm -f
《備考》
以下のように、lsコマンドを使用して特定ユーザのファイル一覧を取得し、それを削除しようとすると、エラーになる。
ls -ahl | grep testuser | xargs rm -f
rm: invalid option -- w
Try `rm --help' for more information.
Linuxのエラーメッセージが日本語表記される場合は、以下のようなメッセージとなる。
rm: オプションが違います -- w
詳しくは `rm --help' を実行して下さい.
エラーを見た時は何のことか分からなかったが、以下のサイトを見ると、エラーの原因が分かった。
rm: invalid option -- 'w'. Why this happened?
http://www.linuxquestions.org/questions/linux-newbie-8/rm-invalid-option-'w'-why-this-happened-849635/
エラーの原因は単純で、lsコマンドに「ahl」といったオプションをつけていると
-rw-r--r-- 1 testuser root 0 4月 27 20:06 aaa.txt
といったように、lsコマンドの結果取得できるのはファイル名だけでなく、パーミッション、ユーザ名、グループ名、タイムスタンプなども取得でき、それらを含めてxargsにセットされてしまうことが原因だった。
つまり、本来は、rmコマンドの引数はファイル名だけとなるべきで
rm -f aaa.txt
となるべきだが、
rm -f -rw-r--r-- 1 testuser root 0 4月 27 20:06 aaa.txt
というように、rmコマンドの引数にファイル名以外の情報が渡されてしまい、
rm: invalid option -- w
Try `rm --help' for more information.
というエラーになってしまう。
なお、以下のように、lsコマンドで特定のユーザで絞り込みを行わず、ディレクトリ内のファイルを全て削除する場合はlsコマンドでもエラーは起きない。
ls | xargs rm -f
こういったやり方があったとしても、特に、lsコマンドにこだわる必要がなければ、あるディレクトリ配下の特定ユーザのファイルのみを削除する場合は、findコマンドを使うのがよさそうだ。