Help us understand the problem. What is going on with this article?

文字化けファイルをinode指定せずファイル名で削除

More than 1 year has passed since last update.

ファイル名が文字化けしたものを削除する場合、findでinodeサーチしたものを削除する方法がよく紹介されていますが、他に方法は無いかと思い調べてみました。

環境

  • ロケールはja_JP.UTF-8
$ cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"

準備

  • 文字化けさせるファイルを生成
$ touch ほげ ほげほげ ほげほげほげ

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ほげ
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ほげほげ
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ほげほげほげ
  • convmvコマンド(ファイル名の文字コード変換)をインストール
$ yum intall convmv

検証

  • まずは準備したファイルの文字コードを変換
$ convmv -r -f utf8 -t sjis ほげほげ --notest
mv "./ほげほげ" "./?ق??ق?"
Ready!

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ?ق??ق?
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ほげ
-rw-r--r-- 1 root root 0  3月 12 10:52 2018 ほげほげほげ

utf8からsjisに変換したところ、綺麗に文字化けしました。
ここでlsで出力されるファイルの上から2番目(ほげほげ)を変換しましたが、変換後の出力では上から1番目に出力されていました。

もしかして文字化けしたファイル名のファイルは、lsすると一番上に表示される?と思い、実ファイルの存在するディレクトリでも試してみました。

$ touch /var/log/きーた

$ ll /var/log/
合計 66744
drwxr-xr-x.  2 root    root        4096 11月 11 07:09 2010 ConsoleKit
(中略)
-rw-r--r--   1 root    root           0  3月 12 10:56 2018 きーた

$ convmv -r -f utf8 -t sjis /var/log/きーた --notest
mv "/var/log/きーた"    "/var/log/???[??"
Ready!

$ ll /var/log/ | head -2
-rw-r--r--   1 root    root           0  3月 12 11:22 2018 ???[??
drwxr-xr-x.  2 root    root        4096 11月 11 07:09 2010 ConsoleKit

おお、一番上になってる。

  • なら複数ファイルが文字化けしていたら?
$ touch ほげ ほげほげ ほげほげほげ ふー ふーふー ふーふーふー

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふーふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふーふーふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげ
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげ
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげほげ

$ convmv -r -f utf8 -t sjis ほげ --notest
mv "./ほげ"     "./?ق?"
Ready!

$ convmv -r -f utf8 -t sjis ふーふー --notest
mv "./ふーふー" "./?Ӂ[?Ӂ["
Ready!

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ?ق?
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ?Ӂ[?Ӂ[
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふーふーふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげ
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげほげ

文字化けファイルが上から順に2ファイル並んでる!
そうであれば…

実践

検証結果を踏まえ、ls出力から文字化けしたファイル数分だけ抜き出してrmに引き渡せば消せる?

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ?ق?
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ?Ӂ[?Ӂ[
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふーふーふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげ
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげほげ

$ ls | head -2 | xargs rm

$ ll
合計 0
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ふーふーふー
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげ
-rw-r--r-- 1 root root 0  3月 12 11:03 2018 ほげほげほげ

消えた!

以上、Qiita初投稿は小ネタとなりました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away