我在我的小公司工作。 尽pipe我有可怕的警告,但是每个人都把文件放在服务器上,名字很糟糕,包括前后空格,坏字符(包括\ ; / + . < > -
etc!)
他们通过在Mac上通过AFP访问(FreeBSD / FreeNAS)服务器来实现这一点,所以系统的任何部分都不会抱怨。
有一个脚本,我可以用来通过整个目录树,修复错误的文件名?
基本上用_
代替所有的空格和错误的ASCII …如果一个文件已经存在,只要打一个_2
或者其他的东西。
我不认为有一种方法可以使系统执行良好的文件约定,是吗?
你可以通过使用find / -iname
模式来匹配你不想看到的东西(可以考虑使用像[^:alnum:]
这样的正则expression式)。 这个,你可以操作(例如用sed)到一个shell脚本中,它将使用mv来重命名这些文件。
可接受的文件名是由文件系统决定的,所以如果没有cronjob,可能或者不可能实施。
@terdon以超级用户提供了一个优雅的1线解决scheme:
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