0

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

1 回答 1

3

您可以使用findand xargsrename如果您的系统已安装该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”。

于 2013-06-02T11:41:01.923 回答