Bash-批处理文件重命名

Bash-批处理文件重命名,bash,Bash,我有一个文件夹,从Picture 002.jpg到Picture 062.jpg的顺序中有61个jpg,我想删除“Picture”,并按照当前的顺序正确地将文件01重命名为61。如何在bash脚本中实现这一点 #!/bin/bash x=1 for f in * do if [ "$f" != "change_name.sh" ]; then new_name=`printf "%02d.jpg" $x` mv -v "$f" $new_name

我有一个文件夹,从Picture 002.jpg到Picture 062.jpg的顺序中有61个jpg,我想删除“Picture”,并按照当前的顺序正确地将文件01重命名为61。如何在bash脚本中实现这一点

#!/bin/bash

x=1
for f in *
do
    if [ "$f" != "change_name.sh" ]; then
       new_name=`printf "%02d.jpg" $x`
       mv -v "$f" $new_name
       x=$((x+1))
    fi
done
用法:将脚本另存为图像的同一目录中的
change_name.sh
,然后运行

在运行此脚本之前,您可以
ls
您的目录。如果文件名顺序正确,就可以了。或者您可以在
for
循环
ls | sort
中更改
ls


希望这能有所帮助。

用<代码>表示f in$(ls)是不好的做法,你应该用<代码>表示f in*@dbaupp你能解释一下吗?为了效率?谢谢。效率(
*
不会产生任何额外的过程)和正确性(如果文件名中有空格或换行符,则使用
ls
将中断)。@dbaupp谢谢。更新脚本。:)运行此命令时,我得到mv:target'01.jpg'不是目录mv:target'11.jpg'不是目录mv:target'111.jpg'不是目录mv:target'1111.jpg'不是目录mv:target'11111.jpg'不是目录mv:target'111111.jpg'不是目录mv:target'1111111.jpg'不是目录mv:target'11111111.jpg'不是目录mv:目标'111111111.jpg'不是目录等。