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

odessa-2581609_1280
LINEで送る
Share on GREE
Share on LinkedIn

データを削除する時って、何だかとても緊張しますよね。
 

GUIでゴミ箱に入れるのであれば、大して緊張などしないのですが、コマンドで削除する時って、もしもの事があっても、リカバリーできないですから、緊張するのも無理はありません。
 

え?僕も、毎回ドキドキですし、過去に消してはいけないデータを余裕で削除したことありますよ。

普通にrmコマンド

ファイルを削除する場合は、rmコマンドなんですが、引数のファイルを指定する時に「*」(アスタリスク)で指定するときなどにミスが起こりやすいようです。
 

以前にもブログで書きましたが、引数で書いてはいけないモノもあるので、こうしたルールを知っておくことも非常に重要なんですね。
 

[トラブルレポート] サーバーコマンドで打ってはいけないファイル名 「./.*」
 

何にせよ、rmコマンドで、「やっちまった」人は、世の中に大量にいるようです。
 

やっちまったああああああああ@Linux板 | リククーブログ
 

そして、裏技ですが、もしもやっちまった時は、復元できる方法もあるようなので、困ったときは「lsof」を検索してみてください。
 

削除したファイルをlsofで復元する
 

でも、ハードディスクの構造を知っている人は、復元の精度の低さはよく理解出来ていると思いますが、ファイルの復元で、戻ってきたファイルって、経験上ほとんどないんですよね。

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

仕事でWEBサービスを公開している人などは、サーバー内のデータを削除する時に、大量のログ・ファイルなど、数万ファイルある時などで、

みたいな事をやった時に、「ファイルが多すぎる」というエラーがでて削除が出来ないことあると思いますが、そういう時は、findコマンド使いますよね。
 

しかし、最近気がついたんですが、sambaアクセスしているサーバーなどであれば、GUI-OSで使っているファイル名をそのままのファイル名になっていて、
 

GUIのファイルでは、かなり色々なファイル名が文字列として許容されているので、トラブルに成ることも多々あります。
 

普通に考えると分かりますが、ファイル名で有効な半角スペースが、コマンドラインでNGになるという事は当たり前なんですが、エラーが出てしまうと露頭にくれてしまうんですよね。
 

 

こんなエラーですよね。
 

この場合は、下記のようにすると、大体解決できます。
 

 

魔法のオプションですね”-print0″は、詳細は深く考えずに、xargsへの値引き渡しだと考えましょう。

findコマンドで他の書き方

上記のfind -print0オプションの他に、下記のように書いても半角スペースは対応できます。
 

 

ファイル名毎に””(ダブルクォート)でくくるやり方ですが、ファイル名に”(ダブルクォート)が入っているとアウトなので、-print0を使ったほうが有効かもしれません。
 

-print0も弾かれる文字列があるんでしょうか???今度調査してみましょう。
 

さらに、上記の削除コマンドだと、カレントフォルダ以下が全て削除されてしまうので、下記のようにファイル名を限定してあげるといいでしょう。
 

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

そして、コマンドラインでデータ削除する場合に、ゴミ箱機能のような機能を持たせる事を検討してみましょう。
 

まず、cronで特定のディレクト内を削除するバッチを作成しておき、削除したいファイルをそのディレクトリにmvするだけなんですが、
バッチファイルが実行されるまでは、復元が可能なので、コマンド打ち込んだ瞬間にきがつく「やっちまった」を回避することはできそうです。
 

しかし、大量のデータを削除する時って、ストレージを圧迫している時なので、緊急で容量を空けないといけない場合ですよね。
 

外部HDDを容易してUSBマウントして、移動しておくというのも、面倒くさいですが、安全ではありますね。
 

クラウドサーバーなどの場合はそうも行かないでしょうが、データの扱い、開発員の責任になってしまうので、なんとか安息の地を見つけたいですね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*