我的目录中有很多文件(带有文件夹,所以我认为解决方案必须深度递归)
- 根文件夹
- 文件-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>
使用此脚本的唯一技巧是,如果任何父目录的名称中有“-”,您也会更改它。您当然可以处理这个问题,但答案会变得太复杂,真正的解决方案会迷失在其中。
这有用吗?如果您还有其他问题,请告诉我。
干杯!