gpt4 book ai didi

重命名文件夹中所有图像的Ubuntu脚本

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:41 26 4
gpt4 key购买 nike

我正在使用以下代码重命名当前文件夹中的所有图像:

a=1
for i in *.jpg; do
new=$(printf "%04d.jpg" ${a}); #04 pad to length of 4
mv ${i} ${new};
a=$((a+1));
done

但是我遇到了一个问题:有些图片被覆盖了,因为我在文件夹中添加了更多图片后才使用它。有没有办法来解决这个问题?我想添加一个 if (name_exists) then next_name,但我是脚本新手。有什么帮助吗?

最佳答案

您可以使用:

#!/bin/bash
glob="[0-9][0-9][0-9][0-9].jpg"
last=$(find . -maxdepth 1 -name "$glob" -print |sort -gr |grep -Pom1 '\d{4}') # or |grep -om1 '[0-9][0-9]*')
last=${last:-0}
while IFS= read -d $'\0' -r image
do
let last++
echo mv "$image" "$(printf "%04s" $last ).jpg"
done < <(find . -maxdepth 1 -name \*.jpg -a -not -name "$glob" -print0)

哪里:

  • 第一个 find 找到最后使用的号码
  • while read 从中读取输出
  • 第二次 find 找到与 NNNN.jpg 名称不同的所有 .jpg
  • 增加和重命名

你可以改进这个

  • 搜索其他类型的图片(不仅仅是jpg)
  • 将脚本更改为不区分大小写
  • 如果图像计数超过 9999,上述操作将失败...所以...

脚本处于dry模式,满意时移除echo

编辑

破折号版本:

glob="[0-9][0-9][0-9][0-9].jpg"
last=$(find . -maxdepth 1 -name "$glob" -print |sort -gr |grep -Pom1 '\d{4}') # or |grep -om1 '[0-9][0-9]*')
last=${last:-0}
for image in *.jpg
do
echo "$image" | grep -q "^$glob$" && continue
#last=$((last+1)) #with leading zeroes, the numbers treated as octal... fails for 08 and such
last=$(expr $last + 1)
echo mv "$image" "$(printf "%04d" $last ).jpg"
done

关于重命名文件夹中所有图像的Ubuntu脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com