0
我嘗試應用此邏輯,使用SED更換和重新命名shell腳本重命名多文件,並刪除單引號
任何線索請
#!/bin/bash
find /home/san -type f -name "*'*" > /tmp/output | while read file
do
rename all files by deleting single quote from the name
done
我嘗試應用此邏輯,使用SED更換和重新命名shell腳本重命名多文件,並刪除單引號
任何線索請
#!/bin/bash
find /home/san -type f -name "*'*" > /tmp/output | while read file
do
rename all files by deleting single quote from the name
done
您可以使用find
與xargs
和rename
(如果您的系統已安裝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」。
完美:)作品 – LeoSam
另外,如果我刪除名稱中的所有特殊字符?不僅單引號 – LeoSam
我已經編輯帖子,因爲您的評論,與'sed'的解決方案。 'rename'不支持正則表達式,但是sed卻支持。使用字符類,可以指定多個字符替換爲「」,如'['!#\ $ ^&*]'而不是'''。安裝'renamexm'也是一個選項,因爲它支持正則表達式,並且可以在我之前給出的命令中替換'rename'。無論哪種方式,您都必須對正則表達式有一個基本的瞭解。或者,您可以使用基於GUI的批量重命名器,如'gprename'或'pyrenamer',它具有用於移除特殊字符的選項。 – kampu