UTF-8システムで無効な文字(Latin1)を含むファイルを見つけて名前を変更するにはどうすればよいですか?

UTF-8システムで無効な文字(Latin1)を含むファイルを見つけて名前を変更するにはどうすればよいですか?

私のUTF-8システムで無効な名前を持つLatin1ベースのシステムのいくつかの古いファイルがあります。さまざまなコードや疑問符で表示されます。たとえば、

/tmp/test $ ls -1
'FRg_Pause lecture_'$'\371''.png'
'FRg_Pause lecture_'$'\353''.png'
'FRg_Pause lecture_'$'\350''.png'
'FRg_Pause lecture_'$'\374''.png'

/tmp/test $ find .
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png

/tmp/test $ tar cvfz test.tar.gz *.png
FRg_Pause lecture_\351.png
FRg_Pause lecture_\352.png
FRg_Pause lecture_\340.png
FRg_Pause lecture_\374.png

UTF-8の名前を変更するために名前を変更したいと思います。たとえば、

FRg_Pause lecture_\340.png -> FRg_Pause lecture_à.png

しかし、名前を変更しても「FRg_Pause Lecture_340.png」が機能するかどうかはわかりません。新しい名前が有効なUTF-8である限り、私たちのツールはもはや文句を言いません。

しかし、問題は、正しいUTF-8名を持つファイルが多いため、OSをLatin1に切り替えて操作を完了できないことです。 UTF-8以外のファイル(および多くのディレクトリに多数のファイルがある)を見つけて、そのファイルに対していくつかの操作を実行する必要があります。

どんなアイデアがありますか?まず、ファイルを見つけるのが難しいことがわかりました。

ベストアンサー1

コメントに提案をいただいたArtemとMC68020に感謝します。

残念ながら、detoxこれは重複を生成しようとしているため機能しません(たとえば、\340両方\342にマッピングされていますa)。

一方、convmv操作は正しく行われた。

/tmp/test $ convmv -f latin1 -t utf-8 -r . --notest
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ù.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ë.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_è.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ü.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_à.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ê.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_é.png"
Ready! I converted 7 files in 0 seconds.

今NASで何千ものファイルの回復を始めましょう :)

おすすめ記事