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

6 bash mv

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

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

每个file1都应该用newfile替换:

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

我试过了:

for f in $(ls file1*); do mv $f newfile*; done
Run Code Online (Sandbox Code Playgroud)

这确实将所有带有file1 的文件替换为一个文件newfile*

for f in $(ls file1*); do mv $f ${f/$f/"newfile"}; done
Run Code Online (Sandbox Code Playgroud)

这也将所有带有file1 的文件替换为一个文件newfile。或者

find . -name "file1.*" -exec sh -c 'mv I DONT KNOW' _ {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

gal*_*axy 7

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

rename 'file1' 'newfile' file1*
Run Code Online (Sandbox Code Playgroud)

这将执行您所描述的操作。该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
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 4

尝试:

for f in ./file1.*; do
  echo mv "$f" "newfile.${f##*.}"
done
Run Code Online (Sandbox Code Playgroud)

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