使用 mv 重命名多个文件的第一部分

使用 mv 重命名多个文件的第一部分

在一个目录中有这些文件和更多:

  • 文件1.txt
  • 文件1.html
  • 文件1.pdf
  • ...

每一个文件1应替换为新文件:

  • 新文件.txt
  • 新文件.html
  • 新文件.pdf
  • ...

我试过了:

for f in $(ls file1*); do mv $f newfile*; done

这确实取代了全部文件与文件1到一个文件新文件*

for f in $(ls file1*); do mv $f ${f/$f/"newfile"}; done

这也取代了全部文件与文件1到一个文件新文件。或者

find . -name "file1.*" -exec sh -c 'mv I DONT KNOW' _ {} \;

我不明白如何将文件名的一部分设置为变量并替换它。

使用 mv 执行此操作的最简单方法是什么?

答案1

如果您在 Linux 上运行,那么实现它的最简单方法是使用rename(它是软件包的一部分util-linux

rename 'file1' 'newfile' file1*

这将执行您所描述的操作。期望rename三个参数:

  1. 在文件名中查找什么
  2. 用什么代替
  3. 要处理的文件掩码

我快速搜索rename,这是第一个命中的例子:http://linux.icydog.net/rename.php

更新如果您的系统上没有rename,但有bash,那么您可以按如下方式进行批量重命名(这相当于rename上面给出的内容):

for f in file1*; do mv -v "$f" "${f/file1/newfile}"; done

答案2

尝试:

for f in ./file1.*; do
  echo mv "$f" "newfile.${f##*.}"
done

该代码仅显示 mv 命令的内容。如果这是您想要的,请删除echomv 命令前面的 。

答案3

在基于 Debian 的系统上,该rename实用程序是 Perl rename,并且语法略有不同:

rename 's/file1/newfile/' file1*

第一个参数是一个 Perl 表达式,它将应用于找到的每个文件名。

答案4

使用 GNU 查找:

find . -maxdepth 1 -name "file1*" -printf "%f\0" | xargs -0 -I {} echo mv -v {} new{}

如果一切看起来都正常,请删除echo.

相关内容