我有许多文件隐藏在我的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:]]/'
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
LANG=C find . -regex '.*[^a-zA-Z./-].*'
这个命令,但我个人认为它并不好,因为它会“检测”任何包含空格、数字、下划线或ASCII符号(如$)的文件名。 - bobpaulLANG=C find . -regex '.*[^a-zA-Z./-].*'
,在我看来并不是很好,因为它会“检测”任何包含空格、数字、下划线或ASCII符号(如$)的文件名。 - undefined