端末で扱えないファイル名をどうにかする方法
とあるCMSで運用されていたウェブサイトが更新を終了したのでコレを静的HTMLに変換しようとしたところ次のようなファイル名(やディレクトリ名)のファイル郡が得られてしまった・w・;
先ずはウェブサイトを丸ごとごっそりとwgetにミラーリングオプション付けて回収。
test-machine /tmp/% wget -m http://www.hoge.fuga/
さて、何やらおかしなことに・・・。
test-machine /tmp/www.hoge.fuga/poyo% ls 合計 96K -rw-r--r-- 1 test-user users 26K 2月 28 11:35 ?%81??%81%98?%82%85?%81? -rw-r--r-- 1 test-user users 13K 2月 28 11:35 ?%81%88?%82%93?%81%92?%81%8D -rw-r--r-- 1 test-user users 19K 2月 28 11:35 ?%81%8A?%82%93?%81%8C?%81%8F -rw-r--r-- 1 test-user users 22K 2月 28 11:35 ?%81%96?%81??%81%8B drwxr-xr-x 1 test-user users 198 2月 28 11:35 . drwxr-xr-x 1 test-user users 1.1K 2月 28 12:06 ..
7bit+α文字文化圏で作られたCMSにありがちな、URLエンコードされていない生の文字列がURLとして使われてしまっていたでござるよ事件とかで発生する・x・;
こうなると正確なファイル名を簡単には扱えないので Konsole や Dolphine などで容易に mv とか F2でリネーム とか出来ない。
手っ取り早くどうにかするには、
test-machine /tmp/www.hoge.fuga/poyo% declare -i i=0 test-machine /tmp/www.hoge.fuga/poyo% for file in * for% do for% mv $file $i for% i=i+1 for% done
とかすると、
test-machine /tmp/www.hoge.fuga/poyo% ls 合計 96K drwxr-xr-x 1 test-user users 8 2月 28 11:35 . drwxr-xr-x 1 test-user users 1.1K 2月 28 12:06 .. -rw-r--r-- 1 test-user users 26K 2月 28 11:35 0 -rw-r--r-- 1 test-user users 13K 2月 28 11:35 1 -rw-r--r-- 1 test-user users 19K 2月 28 11:35 2 -rw-r--r-- 1 test-user users 22K 2月 28 11:35 3
シェルからよしなに謎のファイル名を単なる 0 1 2 3 ... とかって連番のファイル名にできる。あとは煮出すなり焼き干すなり・w・b
※なお、なかのひとは zsh を使っていますが bash でも sh でも同様にできます。