LinuxOSでファイルをコマンドで削除する時のお作法

2017年10月3日

Linux Tips テクノロジー

データを削除する時って、何だかとても緊張しますよね。 GUIでゴミ箱に入れるのであれば、大して緊張などしないのですが、コマンドで削除する時って、もしもの事があっても、リカバリーできないですから、緊張するのも無理はありません。 え?僕も、毎回ドキドキですし、過去に消してはいけないデータを余裕で削除したことありますよ。

普通にrmコマンド

ファイルを削除する場合は、rmコマンドなんですが、引数のファイルを指定する時に「*」(アスタリスク)で指定するときなどにミスが起こりやすいようです。 以前にもブログで書きましたが、引数で書いてはいけないモノもあるので、こうしたルールを知っておくことも非常に重要なんですね。 [トラブルレポート] サーバーコマンドで打ってはいけないファイル名 「./.*」 何にせよ、rmコマンドで、「やっちまった」人は、世の中に大量にいるようです。 やっちまったああああああああ@Linux板 | リククーブログ そして、裏技ですが、もしもやっちまった時は、復元できる方法もあるようなので、困ったときは「lsof」を検索してみてください。 削除したファイルをlsofで復元する でも、ハードディスクの構造を知っている人は、復元の精度の低さはよく理解出来ていると思いますが、ファイルの復元で、戻ってきたファイルって、経験上ほとんどないんですよね。

大量ファイルにはfind+rmコマンド

仕事でWEBサービスを公開している人などは、サーバー内のデータを削除する時に、大量のログ・ファイルなど、数万ファイルある時などで、 $ rm log* みたいな事をやった時に、「ファイルが多すぎる」というエラーがでて削除が出来ないことあると思いますが、そういう時は、findコマンド使いますよね。 しかし、最近気がついたんですが、sambaアクセスしているサーバーなどであれば、GUI-OSで使っているファイル名をそのままのファイル名になっていて、 GUIのファイルでは、かなり色々なファイル名が文字列として許容されているので、トラブルに成ることも多々あります。 普通に考えると分かりますが、ファイル名で有効な半角スペースが、コマンドラインでNGになるという事は当たり前なんですが、エラーが出てしまうと露頭にくれてしまうんですよね。 $ find . |xargs rm No such file or directory こんなエラーですよね。 この場合は、下記のようにすると、大体解決できます。 $ find . -print0|xargs -0 rm 魔法のオプションですね"-print0"は、詳細は深く考えずに、xargsへの値引き渡しだと考えましょう。

findコマンドで他の書き方

上記のfind -print0オプションの他に、下記のように書いても半角スペースは対応できます。 $ find . | xargs -i rm "{}" ファイル名毎に""(ダブルクォート)でくくるやり方ですが、ファイル名に"(ダブルクォート)が入っているとアウトなので、-print0を使ったほうが有効かもしれません。 -print0も弾かれる文字列があるんでしょうか???今度調査してみましょう。 さらに、上記の削除コマンドだと、カレントフォルダ以下が全て削除されてしまうので、下記のようにファイル名を限定してあげるといいでしょう。 $ find . -name "*.log" -print0|xargs -0 rm

こんなやり方いかがでしょう?

そして、コマンドラインでデータ削除する場合に、ゴミ箱機能のような機能を持たせる事を検討してみましょう。 まず、cronで特定のディレクト内を削除するバッチを作成しておき、削除したいファイルをそのディレクトリにmvするだけなんですが、 バッチファイルが実行されるまでは、復元が可能なので、コマンド打ち込んだ瞬間にきがつく「やっちまった」を回避することはできそうです。 しかし、大量のデータを削除する時って、ストレージを圧迫している時なので、緊急で容量を空けないといけない場合ですよね。 外部HDDを容易してUSBマウントして、移動しておくというのも、面倒くさいですが、安全ではありますね。 クラウドサーバーなどの場合はそうも行かないでしょうが、データの扱い、開発員の責任になってしまうので、なんとか安息の地を見つけたいですね。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ