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コマンドを使うのがよさそうだ。

前へ

100円ショップ・ダイソーで購入した電動「毛玉とり器」の実力

次へ

Movable Type 5の「バックアップはディレクトリ/tmpに正常に保存されました。」の/tmpの場所