我试图应用这个逻辑,使用 sed 替换和重命名
请有任何提示
#!/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
and 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
--no-clobber
确保如果有同名文件,它不会被覆盖。“-v” 只是向您显示正在做什么,如果您不关心看到它,您可以删除“-v”。