2015年6月14日日曜日

QNAP上でファイル名文字化け

土曜日。ネットワーク越しに利用してるTS-469Lの容量が微妙なので整理。

先日買ったTS-459Pに退避する事に。
Windows経由するとネットワークが混むのでTS-469LからTS-459Pに直接バックアップ。
ファイル数確認してTS-469Lから移動したファイルをまるっと削除。

ここまでは良かった。

ついでだから整理するかーと思って手をだすまでは。

なにがあったかというと…
光輝くコントロールコード

だれだこんなのファイル名につけたのは。


うちだけどね。

ファイルのリストつくってvimで加工。Excel上でリネームのコマンドつくってsakuraエディタにペースト。
改行コードがCRLFなのに気がつかず保存

termでドン。で見事改行コード付きのファイルでっきあがりー

と言うわけ。
詳しくいうと、Windowsは改行コードはCRLF(\r\n)。unix系はLF(\n)。
ファイル名.txt\r\nと保存されてるファイル名.txt\rがファイル名、\nで実行になっちゃったという訳。

さてここからが問題。
症状的には
  • ファイル名に改行コード\r。リネームパッチに含めた物全滅。
  • ネットワーク越しにWindowsから見るとぶっ壊れ。わけの解らないリストになる
  • http上のファイラーから見ると拡張子は正常だがアイコンが白紙
  • termから見るとファイルは全部生存。けど改行コードのせいでアクセス出来ない。
というところ。

通常であればinode指定で再度リネームするところだけど…
肝心のfindがinode指定出来ないw
QNAPのOSがアレなせい。

さて困った。

実態はあるのにアクセスするための手段がない。
かろうじて名称指定無し、
ls -al *あいうえお*
とかだと引っかかる。

しばらく検索しながら悩んだ結果、GNU findを入れて対処する事に。

1.アプリからoptware ipkgをインストール。

これ。

2.termにログイン。findをインストール

ipkg install findutils
…せめて最初からちゃんとしたコマンドいれといてくれ…

「/opt/bin/find」でGNU findが使えるように。
これで後は単なる作業。

3.inode付きのファイルのリスト作る
ls -aliR > list.txt

4.vimをインストール
なぜって?
:e ++enc=utf-8
出来ないからw
ipkg install vim

5.パッチを作製。
/opt/bin/vim
で開いてinodeとファイル名だけに加工。後はsedのごとく

:g/^\([^ ]*\) \(.*\)/s//\/opt\/bin\/find . -inum \1 -exec mv -f {} '移動先\/\2' \\;/g

そこ。一括で-fつけるとか全然懲りてないやんとか言わない。
ファイル数多すぎていちいちやってられん。

6.作ったバッチを実行。

でいま。

headで数行抜き出して実行する限りちゃんと動作したので現在丸ごと全部実行中。
いつおわることやら…

2 件のコメント: