如何替换多个文件中的符号?

如何替换多个文件中的符号?

我的目录中有很多文件(带有文件夹,所以我认为解决方案必须深度递归)

  • 根文件夹
    • 文件-1.png
    • 文件 2.png
    • 文件 3.png
    • 文件 4.png
    • 文件 5.png
    • 文件夹-1
      • 文件-1.png
      • 文件 2.png
      • 文件 3.png

我需要将所有包含-字符的文件重命名为_

file-1.png -> file_1.png

但。我没什么可说的。folder-1而且root-folder一定没有受到影响。

我怎样才能做到这一点?

答案1

使用 find 和 perl rename 命令:

find . -depth -name "*-*" -execdir prename -v s/-/_/g {} +

答案2

你可以这样做:

#! /bin/bash

ROOT_DIR=$1

cd "$ROOT_DIR"
IFS="
"
for file in $(find -type f)
do
    mv -v "$file" "$(echo $file | sed -e 's#-#_#g')"
done
unset IFS
cd -

假设这个脚本的名字是“my-rename.sh”。调用方式如下:

$ ./my-rename.sh <path-to-root-folder>

使用此脚本的唯一技巧是,如果任何父目录的名称中有“-”,您也会更改它。您当然可以处理这个问题,但答案会变得太复杂,真正的解决方案会迷失在其中。

这有用吗?如果您还有其他问题,请告诉我。

干杯!

相关内容