背景
あるシステムで日本語を含んだファイルをダウンロードするとファイル名がURLエンコードされる場合がある.
例えば,【重要】日本人ってこういうファイル名好きすぎでしょ.txt
というファイルであれば%E3%80%90%E9%87%8D%E8%A6%81%E3%80%91%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%81%A3%E3%81%A6%E3%81%93%E3%81%86%E3%81%84%E3%81%86%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E5%A5%BD%E3%81%8D%E3%81%99%E3%81%8E%E3%81%A7%E3%81%97%E3%82%87.txt
となる.
このようなファイル群をターミナルからコマンド一発で良い感じに元に戻したい.
方法
find -E . -regex '^.+%[0-9A-Z][0-9A-Z]+.*' -exec bash -c "mv {} \`echo {} | nkf --url-input \`" \;
解説
-
find -E . -regex '^.+%[0-9A-Z][0-9A-Z]+.*'
でファイル名に%
から始まり英語大文字と数字の2回以上の繰り返しを含むファイルを検索 -
find
の検索結果のリストが{}
に格納される -
echo {} | nkf --url-input
で2.の結果をURLデコード -
mv {} \`echo {} | nkf --url-input`\
でmv {デコード前のファイル名} {デコード後のファイル名}
という動作をしてくれる