私の LANG=en_US:UTF-8 ファイルシステムには、ファイル名に認識できない文字が含まれてアップロードされた多数のファイルが隠されています。
ファイルシステムを検索し、標準範囲外の文字が少なくとも 1 つ含まれるすべてのファイル名を返す必要があります (a-zA-Z0-9 および .-_ など)。
私はフォローしようとしましたが、運がありません。
find . | egrep [^a-zA-Z0-9_\.\/\-\s]
Fedora Code 9 を使用しています。
convmv
あなたにとって興味深いかもしれません。それらのファイルを見つけるだけでなく、正しいファイル名に名前を変更することもサポートしています (何が問題なのかを推測できる場合)。
find . | perl -ne 'print if /[^[:ascii:]]/'
探す 。| | egrep [^a-zA-Z0-9_./-\s]
危うし、砲弾脱走!
bash はその最後のパラメーターを解釈し、1 レベルのバックスラッシュ エスケープを削除します。「[^group]」式を二重引用符で囲んでみてください。
もちろん、これは UTF-8 よりも多くのことを禁止します。有効な UTF-8 文字列に一致するように正規表現を作成することは可能ですが、かなり醜いです。Python 2.x を利用できる場合は、それを利用できます。
import os.path
def walk(dir):
for child in os.listdir(dir):
child= os.path.join(dir, child)
if os.path.isdir(child):
for descendant in walk(child):
yield descendant
yield child
for path in walk('.'):
try:
u= unicode(path, 'utf-8')
except UnicodeError:
# print path, or attempt to rename file
OPと同様の問題があり、スーパーユーザーで解決策が与えられました(さらにコメントも参照)。「convmvソリューション」よりも満足のいくものでしたが、comvmvも発見できたことに感謝しています。