shell脚本重命名多个文件并删除单引号

时间:2013-06-02 08:35:01

标签: shell sed

我试图应用这个逻辑,使用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

1 个答案:

答案 0 :(得分: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

--no-clobber确保如果存在具有相同名称的文件,则不会覆盖该文件。 “-v”只是告诉你正在做什么,你可以删除“-v”如果你不在乎看到它。