递归地用减号替换下划线但仅适用于某些扩展?

Replace underscore with minus recursively but only for certain extensions?

我想用减号替换文件夹及其子文件夹中文件的所有下划线,并且我只想包含 jpg、JPG 和 png。一开始我尝试了 rename '/_/-/g' ./* 但不包括子文件夹。我该怎么做?

谢谢

在 Linux 上,您可以通过 "find":

遍历文件夹

找到。 -name "*.pdf" -type f -exec #rename command here, current filename is "{}"# \;

编辑:忘记\;

Globstar 允许您匹配文件夹中或文件夹下任何位置的文件。 ${f//_/-}是一个bash "Pattern substitution":它替换$f的值,模式前的双斜杠表示替换所有匹配。

shopt -s globstar
for f in **/*.jpg **/*.JPG **/*.png
do
  mv "$f" "${f//_/-}"
done

我的系统不支持rename这种语法,所以我不能给你很好的使用建议,但你也可以使用globstar为它生成文件名。