長いタイトルで申し訳ないんですが…
今日、5年以上前からパソコンのお世話をしているとある会社に行きました。 作業内容はというと、NASに外付けハードディスクを接続してバックアップ設定をするというものでした。
そのついでにNAS内の「ゴミ箱」であるtrashbox
フォルダを掃除しようと思って、Samba(Windowsネットワーク共有フォルダ)越しに削除をするんですが、これがとても遅くて。
残り1時間とか言われて笑っちゃう。
そこで、NAS内で稼働しているLinuxにSSHして、NAS内でrmすることにしました。 その過程で得たノウハウを備忘録として書いておきます。誰かのニッチな需要を満たせたら幸いです。
作業を行ったNASは「LS-WHGL/R1」シリーズの2TB版、 SSHクライアントはTera Termです。
はじめに流れをまとめておくと、
- Buffalo NASのセキュリティホールを突いてSSHできるようにする
- SSH接続する
- (日本語フォルダ内にtrashboxがある場合)下準備をして日本語フォルダにcdできるようにする
- trashboxまでcd、
ls | xargs rm -rf
する
という感じです。
Buffalo NASのrootを取ってSSHできるようにする
検索すると親切な説明のあるサイトがいくつか出てくると思うので、 すいませんが手順は割愛します。
実際にSSH接続して、trashboxまでcd…と思いきや
SSHできるようにしたら、実際にsshを叩いてNASに接続します。
/mnt/array1
にある実際のRAIDアレイに入ると共有フォルダがあります。
続いて、共有フォルダにcd…とここでつまずきました。日本語のフォルダにcdできないのです。 IMEから漢字を入力すると全部ハイフンになってしまいます。
(なお、ここでは日本語フォルダを"あいうえお"とします。)
sh-2.05b$ cd /mnt/array1
sh-2.05b$ ls
BACKUP spool あいうえお
(arg: -1) cd --------
sh: cd: --: invalid option
cd: usage: cd [-L|-P] [dir]
ls
はできていることから、幸いにも2バイト文字の処理そのものは正常にできていることがうかがえます。
つまり、SSH越しで2バイト文字は打てないが、NAS内でパスを処理させればいけそうな気がしますね。
そこで、新規にtest
という共有フォルダを作り、その中にフォルダ名が書かれたテキストpath.txt
を置いて処理させることにしました。
catからパイプでつないでcdする方法はStackOverflowのこの手法を参考にしました。
sh-2.05b$ pwd
/mnt/array1
sh-2.05b$ cd test
sh-2.05b$ ls
path.txt
sh-2.05b$ cat path.txt | nkf -j --utf8
あいうえおsh-2.05b$ cd ..
sh-2.05b$ cd $(cat /mnt/array1/test/path.txt | nkf -j --utf8)
sh-2.05b$ pwd
/mnt/array1/あいうえお
sh-2.05b$
path.txt
は当初UTF-8で保存してcdに渡していたのですがなぜかうまくいきませんでした。
今回のケースの場合、あえてShift-JISで保存しておき、nkf -j --utf8
でUTF-8に変換させ渡すと不思議とうまくいきました。
改めてtrashboxを掃除
あとは、trashbox
にcd
して、rm
するだけです。
sh-2.05b$ pwd
/mnt/array1/あいうえお
sh-2.05b$ cd trashbox
sh-2.05b$ ls | xargs rm -rf
sh-2.05b$
やったね!