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

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

最佳答案

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 本身管理的环境变量。

关于linux - 使用linux shell脚本重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019000/

相关文章:

linux - 从 for 循环 bash 中传递的参数构建字符串

linux - 如何将 "watch"的输出保存到文件

linux - 自定义删除文件夹中的文件

php - 关于如何在 linux 中与另一个 shell 交互使用 shell 的一些问题

shell - 使用 cURL 从 shell POST 4GB 文件

regex - 在Linux上重命名多个文件

linux - 文件存档的分布式解压缩

linux - perl 脚本执行时间非常慢

php - 当从 php 执行时,mysql 导入的整理不同

shell - 中断当前程序而不退出VIM