使用linux shell脚本重命名多个文件

时间:2017-12-29 07:20:57

标签: linux bash shell

我有以下图片。

10.jpg
11.jpg
12.jpg

我想删除上面的图片。我使用了以下shell脚本文件。

for file in /home/scrapping/imgs/*
do
    COUNT=$(expr $COUNT + 1)
    STRING="/home/scrapping/imgs/""Img_"$COUNT".jpg"
    echo $STRING
    mv "$file" "$STRING"
done

所以,替换了文件名

Img_1.jpg
Img_2.jpg
Img_3.jpg

但是,我想替换这样的文件名:

Img_10.jpg
Img_11.jpg
Img_12.jpg

那么,如何设置COUNT值10以获得我自己的输出?

2 个答案:

答案 0 :(得分:4)

expr语法已经过时,POSIX shell允许您使用$(())语法进行算术评估。你可以做到

#!/usr/bin/env bash

count=10
for file in /home/scrapping/imgs/*; do
    [ -f "$file" ] || continue
    mv "$file" "/home/scrapping/imgs/Img_$((count++)).jpg"
done

同样根据评论中报告的错误,您似乎是从dash shell运行它。它似乎没有符合标准POSIX shell的所有功能。使用shbash shell运行它。

并且在shell脚本中始终对用户定义的变量使用小写字母。大写字母主要用于shell本身管理的环境变量。

答案 1 :(得分:1)

使用rename命令,您可以使用 Img _

为文件添加后缀
rename 's/^/Img_/' *

^ 表示用 Img _ 替换文件名的开头,即:添加后缀。