我在我的小公司里做 IT 工作;尽管我发出了严厉的警告,但每个人都在服务器上放置了名称可怕的文件,包括前导和尾随空格、坏字符(包括\ ; / + . < > -
等等!)
他们通过 Mac 上的 AFP 访问(FreeBSD/FreeNAS)服务器来实现这一点,因此系统的任何部分都不会抱怨。
是否有一个脚本可以用来遍历整个目录树并修复错误的文件名?
基本上用 ... 替换所有空格和错误的 ASCII _
,如果文件已经存在,则只需_2
在末尾加上 a 或其他内容。
我不认为有办法让系统执行有好的文件命名约定吗?
答案1
find / -iname
您可以使用模式匹配您不想看到的内容来获取它们的列表(考虑使用正则表达式,如[^:alnum:]
)。您可以将其操作(例如使用 sed)到将使用 mv 重命名文件的 shell 脚本中。
可接受的文件名由文件系统决定,因此可能有或可能没有不使用 cronjob 的方法来强制执行它。
答案2
@terdon 在超级用户那里提供了一个优雅的一行解决方案:
SAVEIFS=$IFS; IFS=$(echo -en "\n\b"); \
for i in $(find . -type f -name "*[\:\;\>\<\@\$\#\&\(\)\?\\\%\ ]*"); \
do mv "$i" ${i//[\;><\@\$\#\&\(\)\?\\\%\ ]/_}; done; IFS=$SAVEIFS
(为清晰起见添加了换行符;全部为一行。)
或者,你可以更积极地使用类似
for i in $(find . -type f -name "*[^0-9A-Za-z\_\.\-]*");
完整详情请点击这里:https://superuser.com/questions/463742/shell-script-to-fix-bad-filenames