【问题标题】:trying to replace file name with sed and for loop试图用 sed 和 for 循环替换文件名
【发布时间】:2021-12-31 15:02:09
【问题描述】:

我是个新手,我已经花了 2 个小时寻找答案,但我自己想不通...

我只想替换特定文件夹中的一些文件名。我尝试使用 sed 和 for 循环。

我现在的格式是这样的:

IMG-20211228-WA0057.jpg
IMG-20211228-WA0069.jpg
IMG-20211228-WA0078.jpg

我想要的结果是:

image_1.jpg
image_2.jpg
image_3.jpg

我怎样才能做到这一点?

现在我已经尝试过这样的事情:

for f in *.jpg; sed "s/^.*/image_${f}.jpg/"; done

有些帮助会很友善。

【问题讨论】:

    标签: shell for-loop sed


    【解决方案1】:

    另一种技术,如果您想对数字进行零填充(即image-001image-999

    # 1. store the filenames in an array
    images=(*.jpg)
    
    # 2. width of the padding is the string length of the number of images
    num=${#images[*]}
    wid=${#num}
    
    # 3. do the renaming
    c=0
    for img in "${images[@]}"; do
        printf -v newname 'image-%0*d.jpg' $wid $((++c))
        echo mv -iv "$img" "$newname"
    done
    

    【讨论】:

      【解决方案2】:

      bash。我假设所有图像都在当前目录中。

      unset c; for i in *.jpg; do mv -iv "$i" "image_$((++c)).jpg"; done
      

      输出:

      重命名为“IMG-20211228-WA0057.jpg”->“image_1.jpg” 重命名为“IMG-20211228-WA0069.jpg”->“image_2.jpg” 重命名为“IMG-20211228-WA0078.jpg”->“image_3.jpg”

      【讨论】:

      • 这项工作完美!非常感谢
      猜你喜欢
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2019-04-04
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多