批量重命名,无论文件扩展名是什么

批量重命名,无论文件扩展名是什么

我对批量重命名还很陌生,我进行了一些查看,发现了一些关于重命名大量同一类型的文件的内容,但没有关于重命名一堆具有不同扩展名的文件的内容。

我的意思是我有一个像这样的目录:

Folder 
  |
  file.jpg
  EBUFEWO.png
  otherFile.jpg

我正在试图弄清楚如何将其重命名为如下形式:

Folder
  |
  Renamed_0001.jpg
  Renamed_0002.png
  Renamed_0003.jpg

我想保留文件夹中文件的扩展名,但像上面那样重命名它们。

我已经寻找了一段时间但并没有真正遇到过这样的例子,任何帮助都将非常有用!

答案1

我想我会

shopt -s nullglob

cd Folder

n=1
for file in *.*; do 
  printf -v newfile 'Renamed_%04d.%s' $((n++)) "${file##*.}"
  echo mv -- "$file" "$newfile"
done
mv -- EBUFEWO.png Renamed_0001.png
mv -- file.jpg Renamed_0002.jpg
mv -- otherFile.jpg Renamed_0003.jpg

echo出于测试目的而添加)。或者,使用基于 perl 的prename

cd Folder
prename -n 'our $n; s/(.*)\.(.*)$/sprintf "Renamed_%04d.%s", ++$n, $2/e' *.*
EBUFEWO.png renamed as Renamed_0001.png
file.jpg renamed as Renamed_0002.jpg
otherFile.jpg renamed as Renamed_0003.jpg

-n为测试目的而添加)。

答案2

我希望这有帮助

count=1; \
for file in * ; do ext=${file##*.}; \
while [ ${#count} -ne 3 ]; do count="0"$count; done; \
mv "$file" Renamed_$count.$ext; count=$((10#$count+1)); done

这是针对单个文件夹的内容进行的测试,并按照您的指定执行。

  1. ext=${file##*.} 获取要重命名的文件的扩展名。
  2. while [ ${#count} -ne 3 ]; do count="0"$count; done您要求重命名的文件保留 3 位数字,这将添加所需数量的前导零,1变为00120变为020
  3. mv "$file" Renamed_$count.$ext;将文件重命名为指定的参数。

鉴于我有限的经验,我确信有更简单、更有效的方法。

请注意,这是在指定文件夹上执行一次的。

相关内容