【问题标题】:Multiple files rename using linux shell script使用 linux shell 脚本重命名多个文件
【发布时间】:2018-06-09 16:21:48
【问题描述】:

我有以下图片。

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


【解决方案1】:

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

rename 's/^/Img_/' *

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

【讨论】:

    【解决方案2】:

    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
    

    此外,从 cmets 中报告的错误来看,您似乎是从 dash shell 运行它的。它似乎没有符合标准 POSIX shell 的所有功能。使用shbash shell 运行它。

    在你的 shell 脚本中,用户定义的变量总是使用小写字母。大写字母主要用于 shell 自身管理的环境变量。

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2013-05-02
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多