Linux で文字コードが違うファイル名を rm / mv する方法

unzip を使ってzipファイルを展開するとき、中身のファイル名に日本語が含まれてると十中八九残念な結果になります。

tomoari@mirin:~/zip% ls -q
total 63M
-rw-r--r-- 1 tomoari users 146K Dec 9 2007 119?l?C???X?g.jpg
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 ?????g 2M MIX.mp3
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 ?????g 3M MIX ?J???I?P.mp3
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 ?????g 3M MIX.mp3
-rw-r--r-- 1 tomoari users 7.9M May 16 2008 ?????g .mp3
-rw-r--r-- 1 tomoari users 218K May 21 2008 MELT2M.jpg
-rw-r--r-- 1 tomoari users 3.4K Nov 6 2008 ???Ƃ???.txt

目も当てられない感じですね。ところでこれ厄介なのが、ファイル名をキーボードから入力できないので rm できないんです。一番上の 119?l?C???X?g.jpg は 119 まで入力して補完してもらえばいいとして、 ?????なんちゃらのファイルはもちろん ? を入力しても補完されるわけでもなく、悲しいことになります。

というわけですが、まあこんなものは ls -Q してやればぶっこわれたファイル名も文字コードで表示してくれます。
ls –help には “enclose entry names in double quotes” って書いてありますね。

tomoari@mirin:~/zip% ls -Q
total 63M
-rw-r--r-- 1 tomoari users 146K Dec 9 2007 "119\227l\203C\203\211\203X\203g.jpg"
-rw-r--r-- 1 tomoari users 31M Apr 28 18:35 "3melt.zip"
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 "\203\201\203\213\203g 2M MIX.mp3"
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 "\203\201\203\213\203g 3M MIX \203J\203\211\203I\203P.mp3"
-rw-r--r-- 1 tomoari users 8.0M Nov 6 2008 "\203\201\203\213\203g 3M MIX.mp3"
-rw-r--r-- 1 tomoari users 7.9M May 16 2008 "\203\201\203\213\203g .mp3"
-rw-r--r-- 1 tomoari users 218K May 21 2008 "MELT2M.jpg"
-rw-r--r-- 1 tomoari users 3.4K Nov 6 2008 "\202\240\202Ƃ\252\202\253.txt"

やったね!これでrmできるね!
rm はこんな感じになります。エスケープされた文字を入力するときは $” で囲まなければいけない。

tomoari@mirin:~/zip% rm 119$'\227'l$'\203'C$'\203'$'\211'$'\203'X$'\203'g.jpg

注: エスケープシーケンスから始まるファイル名はzshは補完してくれませんfindで作成時間絞りこんで消せ

Google Play Music Player が便利すぎて便利すぎるから便利

今まで所有してた曲は全部外付けHDDにぶち込んで、聴きたいときはPCにつないでちまちま開くしかなかったためせっかくCDを買っても聴くのが億劫になってたのですが、Google Play Musicでこの状況が一変しました。

そもそも Google Play Music とは

最近海の向こうで流行ってるらしいクラウド上のミュージックプレーヤーです。何がすごいかって?

  • 手持ちの曲を20000ファイルまで無料でアップロードできる
  • インターネット接続さえあればどこでも全曲ストリーミングで聴ける (ブラウザかAndroid(>4.0)が必要)

そう、携帯端末にファイルを一切保存しなくても、自分の曲をGoogleのサーバーにアップロードしておくだけでどこからでも、聴きたくなった時に聴けるのです!!

そんなこんなで今はWebのインターフェイスから音楽を聴いてますが、使い勝手がよく、思った通りの操作ができます。気が向いたらいつでも開けて便利です。まだ1000曲程度しかアップロードしてませんが、最近聴かなくなった曲を見つけるたびにワクワクしてます。

2013-03-31_11-57
2013-03-31_11-58
音ゲー曲ばっかじゃねえか
ち、違うんだから!Alphabeticalだからbeatmania IIDXが最初に来ただけなんだからー!!

細かい点

  • Artists はアルバムアーティストでソートしてくれる!(・∀・)イイ!!
  • ファイル名やタグにマルチバイト文字が入っていても特に問題ない
  • アップロード速度はそこそこ速いが、アップロード前にMP3に変換する処理が長い
  • 再生開始時に数秒待たされて多少気になる。最初の一曲は仕方ないにしても再生中の次の曲はプリロードしてほしい
  • 著作権法の影響で日本から利用できない(ゴニョゴニョ
  • 日本から買えないのにGoogle PlayってEXILEとかB’zの曲売ってるんだ…

なんにせよ非常に便利なんで、著作権法改正と日本でのサービス開始を切に願います。あ、僕アメリカ合衆国横浜市在住なんで!
2013-03-31_12-20

Walkman NW-805K 購入しました

2013-01-14 16.49.19

Walkman NW-805K を購入しました。スピーカー付き, 16GBモデルです。
今のOptimus Chatが低スペ過ぎてまともなAndroid端末が安くほしかった、Nexus 7とだいぶ迷ったけど価格で決めた
音質とかよくわからないので何も言わないでおきます><
レビューもめんどくさいので他のブログとかにお任せします!
あとOptimus Chat のクソスペックに慣れきってたせいか、 twiccaのTLが2秒でリロードできることに感動しました!

そんなことより衣ちゃんかわいいよね!ね!

クソアプリでも作ってみようと思って環境設定してたらちょっとひっかかったのでメモ。
adbで通信できるようにするためにはちょっと面倒なことをしなければならない模様。

続きを読む

mikutterのキーバインドをVim風味にしてみた

みくったーのキーバインドをVim風味にしてみた。
といっても大したことではないし、実はかなりVimと関係ないものがあったりする。

使う機能のうち95%ぐらいをキーボードで操作したかったので(テキスト中心の操作中にマウスに持ち替えるのは割と面倒くさい)、大量に設定しています。

続きを読む

2013 あけましておめでとうございます

あけましておめでとうございます!2013年ですよ!
あまりにもたくさんのリアル知り合いにTwitterアカウントを捕捉されたので @_osyoyu に引越しました!
(このちっちゃい女の子のアイコン? ってクラスの女子が言ってるのを聞いて血の気が引いた)

続きを読む

Gehirn RS2 に移行しました

いままでさくらのVPS 1G (512から1Gに途中で移行しています) に大変お世話になっていたのですが、980円+振込手数料/月 という料金はごく平均的な高校生の自分のお財布にはちょっと痛いどころか激痛だったため、代わりを探していました。
(ただし、品質に見合ったどころか安い価格設定だと思うことを付記しておきます)

続きを読む

Rubyで可変長引数を使う / 引数を配列で渡す

よく忘れるのでメモ。

# 可変長引数
def hoge*arg
  p arg
end
 
hoge1, 2, 3 #=> [1, 2, 3]
hoge1, 2, 3, 4 #=> [1, 2, 3, 4]
 
# 引数を配列で渡す
def fugaa, b, c
  p a, b, c
end
 
fuga1, 2, 3 #=> [1, 2, 3]
fuga1, 2, 3, 4 #=> エラー
 
# 可変長引数と組み合わせる
def piyo*d
  p d
end
 
piyo1, 2, 3 #=> [1, 2, 3]
piyo1, 2, 3, 4 #=> [1, 2, 3, 4]

XSSを放置してたら数十分でサイトのデザインが出来上がってた件

作ってたオンラインゲームの通信部分らしきものがなんとなく出来上がったので、適当にチャットもどきを作り上げて公開してま(す|した)。
ここです http://osyoyu.com/client/

ところで、WebSocket+MessagePackを使った通信が実装できたことで嬉しくなって、XSS対策とか忘れてました。

そこに目をつけた @kyonfuee さんがjQueryを実行しまくってデザインしてくれました(!?)
ありがとうございます!!

before (お世辞にも良いデザインとは言えない):

after:

っていう感じになってました。気づかないうちに簡素なページが豪華になってました。感動…!!
あと誰だ愛理をbackgroundにしたの。次からはできればロリっ娘でお願いします。

結論: XSSは積極的に放置して行け

あ、最終的には em-websocket がバグって死んだっぽいので, 暇があったらWebSocketライブラリ書こうかなーっと思いました。
em-websocket, ちょっと使いにくいし。

Ruby+WebSocketでオンラインゲームを作ろう

なんかサーバーの調子が悪かった(前回時間がなくて適当にいろいろセットアップした)ので、サーバーをクリーンインストールしました。
普通にUbuntu 12.04。

オンラインゲームを支える技術 を読んで、オンラインゲームを作ろうと思ったのでメモ。(逆だった気もする)

とりあえず早めに動くものをつくる方針で(そうすれば文化祭にも出せる!)、
最初はサーバー: Ruby, クライアント: C#もしくはC++でやろうと思ってたけど、C#にもC++にも慣れてるわけでもないので最終的に

  • サーバー: Ruby
  • クライアント: JavaScript (要はWebSocket)

になりました。IEは積極的に切り捨てていこう

あと、 MessagePack なる面白そうなバイナリシリアライズライブラリを見つけたので、それを使って見ることに。

(サーバー) <=> MessagePack <=> WebSocket <=> MessagePack <=> (クライアント)
みたいな感じで通信できるようにする。

まあぼちぼちコードとか上げていきます。