Linuxファイルに半角スペースを含んだファイル名がrmできない件

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

GUIよりも、コマンドの方が使いやすいと発言し始めたら、熟練者レベルという事を認識できる、下駄です。
 

先日、とあるシステムのサーバー内で、不要になったファイルを大量に削除しなければいけない作業があり、
 

findコマンドで、抽出して、rmコマンドに受け渡す、ワンライナーコマンドを実行したところ、
 

なんかわからないけど、エラーが出たので、調べてみたら、ファイル名に半角スペースが含まれていました。
 

5秒で終わると思ってた作業が意外と手こずったという事をブログに残しておきたいと思います。

本日のIT謎掛け

「ワンライナー・コマンド」と、かけまして、
 

「水漏れの修理」と、ときます。
 

そのココロは・・・
 

・・・
 

パイプを使って、操作します。

半角スペースのファイルを削除するには・・・

コレ自体はそんなに難しいコトではないのですが、半角スペースにバックスラッシュを付ければいいダケのことです。
 

例えば、”image (1).jpg”というような、macで同名ファイルがあったばあいに、自動採番されるファイルなど、半角スペースが入っているものを、コマンドでrm削除したい場合は、以下のようにします。
 

 

また、もう一つの方法として、ファイルをクォーテーションでくくってあげるという手段
 

 

シングルクォート、ダブルクォートのどちらでも問題なく削除できます。
 

find連動での問題について

1ファイルずつrmしていく場合は、全くもって問題ないんですが、
 

削除するファイルが多い場合に、パイプで受け渡す場合に、色々とめんどくさい手続きが必要になります。
 

まずは、エラーの状態を書くk人してみましょう。
 

 

めんどくさいですねえ、lsやfindの結果は、クォートや、バックスラッシュ対応してくれないんですね。
 

ワンライナーでの解決方法

これらのエラーを防ぐ方法はいくつかあるので、2つほどご紹介したいと思います。
 

まず、findコマンドの場合には、-execオプションを使うと、削除をしてくれる機能があります。
 

 

次に、sedを使って、強制的にエスケープ処理を実行する方法です。
 

 

どちらを使ってもいいのですが、間違っても、必要なファイルまで消してしまわないようにしなければいけませんね。
 

rmコマンドは、取り消しができないですからね!
 

ミス防止のプチテクニックとしては、”trush”フォルダを作って、その中に削除するファイル一覧を移動(mv)させて、問題がなければ、trashフォルダごと削除(rm)するというやり方をおすすめします。
 

ディスクからの容量削減をしたい場合は、別サーバーにrsyncやsshで、移動させるという手もあるし、usbスティックモジュールを使ってバックアップを取るというのも悪く有りません。
 

めんどくさいと考えてしまいがちですが、ひと手間のリスクヘッジができるかどうかが、上級者と初心者の違いですからね。

Leave a Reply

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