我的 LANG=en_US:UTF-8 文件系统中隐藏了许多文件,这些文件已上传,文件名中包含无法识别的字符。
我需要搜索文件系统并返回至少有一个字符不在标准范围内的所有文件名(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 将解释最后一个参数,删除一级反斜杠转义。尝试在 "[^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