2013-06-02 85 views

回答

3

您可以使用findxargsrename(如果您的系统已安装util-linux软件包)。

find /home/san -type f -name "*'*" -print0 | xargs -0 -L1 rename "'" "" 

随着“sed的”按照规定,你可以使用命令替换:

find "/home/san" -type f -name "*'*" | while IFS= read -r file 
do 
    # we need to avoid replacing characters in the path to the file, 
    # so split it into dirname and filename. 
    DIRNAME=$(dirname "$file") 
    FILENAME=$(basename "$file") 
    NEWNAME=$(sed "s/'//g" <<< "$FILENAME") 
    mv -v --no-clobber "$file" "$DIRNAME/$NEWNAME" || echo "$DIRNAME/$NEWNAME already exists, not overwriting." 
done 

​​保证,如果有同名文件,它不会被覆盖。 “-v”只是告诉你正在做什么,如果你不关心这个问题,你可以删除“-v”。

+0

完美:)作品 – LeoSam

+0

另外,如果我删除名称中的所有特殊字符?不仅单引号 – LeoSam

+0

我已经编辑帖子,因为您的评论,与'sed'的解决方案。 'rename'不支持正则表达式,但是sed却支持。使用字符类,可以指定多个字符替换为“”,如'['!#\ $ ^&*]'而不是'''。安装'renamexm'也是一个选项,因为它支持正则表达式,并且可以在我之前给出的命令中替换'rename'。无论哪种方式,您都必须对正则表达式有一个基本的了解。或者,您可以使用基于GUI的批量重命名器,如'gprename'或'pyrenamer',它具有用于移除特殊字符的选项。 – kampu