8

私の LANG=en_US:UTF-8 ファイルシステムには、ファイル名に認識できない文字が含まれてアップロードされた多数のファイルが隠されています。

ファイルシステムを検索し、標準範囲外の文字が少なくとも 1 つ含まれるすべてのファイル名を返す必要があります (a-zA-Z0-9 および .-_ など)。

私はフォローしようとしましたが、運がありません。

find . | egrep [^a-zA-Z0-9_\.\/\-\s]

Fedora Code 9 を使用しています。

4

4 に答える 4

16

convmvあなたにとって興味深いかもしれません。それらのファイルを見つけるだけでなく、正しいファイル名に名前を変更することもサポートしています (何が問題なのかを推測できる場合)。

于 2009-03-08T16:03:30.950 に答える
8
find . | perl -ne 'print if /[^[:ascii:]]/'
于 2012-02-01T09:48:25.187 に答える
2

探す 。| | 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
于 2009-03-08T16:25:39.710 に答える
-1

OPと同様の問題があり、スーパーユーザーで解決策が与えられました(さらにコメントも参照)。「convmvソリューション」よりも満足のいくものでしたが、comvmvも発見できたことに感謝しています。

于 2010-11-28T05:17:44.840 に答える