2013-06-02 129 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