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