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

问题描述 投票:2回答:2

我有以下图片。

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来获得我自己的输出?

linux bash shell
2个回答
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
投票

使用rename命令,您可以使用Img_为文件添加后缀:

rename 's/^/Img_/' *

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

© www.soinside.com 2019 - 2024. All rights reserved.