Bash:检查文件名的唯一性,重命名或删除文件

我正在用bash在CentOS上工作,我在一个目录中有文件,如下所示:

16948.png 16948_thumb.png 16948-1_thumb.png 16949.png 16948_thumb.png 16949-1_thumb.png 16950-1.png 16950-1_thumb.png 16950-2.png 16950-2_thumb.png 

我想要做以下事情:

  • 对于文件列表中存在的每个唯一编号N
    • 检查是否有文件N-1.png:
    • 如果没有,通过将N.png复制到N-1.png来创build它(总会有一个N.png)
    • 删除N.png文件
    • 检查是否有文件N-1_thumb.png:
    • 如果没有,则通过将N_thumb.png复制到N-1_thumb.png来创build它(总会有一个N_thumb.png)
    • 删除文件N_thumb.png。

不过,我的shell脚本还不够好。 这是就我所知 – 任何人都可以帮忙吗?

 #!/bin/sh declare -a unique_numbers for filename in ./images do // split filename at - or _ to get N, and then check // whether N is already in list of unique numbers // if it is, skip continue // if it isn't, append to unique_numbers unique_numbers+=(N) // then check whether there is a file N-1.png.. etc done; 

如果我很了解你,这应该做到这一点。 第一个循环处理所有名为Number.png文件,第二个处理所有名为Number_thumb.png文件。

 #!/bin/sh for number in `ls -1 images/*.png | grep -v thumb | grep -v "-" | cut -f2 -d / | cut -f1 -d .` do if [ ! -e "./images/$number-1.png" ] ; then cp images/"$number.png" images/"$number-1.png" fi rm ./images/"$number.png" done; for number in `ls -1 images/*.png | grep thumb | grep -v "-" | cut -f2 -d / | cut -f1 -d . | cut -f1 -d _` do echo $number if [ ! -e "./images/$number-1_thumb.png" ] ; then cp images/"$number"_thumb.png images/"$number-1_thumb.png" fi rm ./images/"$number"_thumb.png done;