我试图应用这个逻辑,使用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
答案 0 :(得分:3)
您可以将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
--no-clobber
确保如果存在具有相同名称的文件,则不会覆盖该文件。 “-v”只是告诉你正在做什么,你可以删除“-v”如果你不在乎看到它。