更新

更新

我有 2 个这样的文件夹结构:

SOURCE_FOLDER_W_GOOD_NAMES
├── A_some_name.png
├── B_another_different_name.png
├── C_just_another_too.png
└── D_this_one_stop_this_example.png

另一个文件夹:

DESTINATION_FOLDER_W_INCREMENT_NAMES
├── icon_0.icns
├── icon_1.icns
├── icon_2.icns
└── icon_3.icns

所以基本上,SOURCE_FOLDER已经包含按字母顺序排序的文件。此排序顺序已与DESTINATION_FOLDER(例如:A_some_name.png=== icon_0.icns)匹配

我使用这个循环组合来重命名文件:

i=0
j=0
for img in SOURCE_FOLDER/*.png; do
  for i in {0..10000}; do
    let j++ || true;
    mv "SOURCE_FOLDER/icon_$i.icns" "DESTINATION_FOLDER/${img%.*}.icns"
  done
done

我在上述文件夹的根目录中的命令行上执行了此操作(上面已格式化,我是一个单行的人)。

THE_FATHER_FOLDER
├── SOURCE_FOLDER_W_GOOD_NAMES
└── DESTINATION_FOLDER_W_INCREMENT_NAMES

不幸的是,上面的循环没有按我的预期工作。我确信我错了,但我不知道错在哪里。

请纠正我。

更新

上面问题的解决办法,我自己解决了

counter=0
for img in SOURCE_FOLDER/*.png; do
  let counter++ || true;
  mv "SOURCE_FOLDER/icon_$counter.icns" "DESTINATION_FOLDER/${img%.*}.icns"
done

但我还有一个问题,在这个文件夹中:

DESTINATION_FOLDER_W_INCREMENT_NAMES
├── icon_0.icns
├── icon_1.icns
├── icon_2.icns
└── icon_3.icns

我想重新索引它1代替0,因此我正在使用这个:

counter=0
for index in {0..final_number}; do
  let counter++ || true;
  mv "icon_${index}.icns" "icon_${counter}.icns";
done

目前,我的文件从0并最终得到最终编号 - 1,因此它将覆盖此文件夹中的每个单个文件,并且我只得到第一个文件(icon_0),完成后将其重命名为(icon_final_number)。

我该如何解决这个问题?

答案1

您想要重命名向后:

counter=$((final_number + 1))
for index in {final_number..0}; do
  mv "icon_${index}.icns" "icon_${counter}.icns";
  let counter--;
done

答案2

您的问题将通过以下代码解决:

#!/bin/sh

i=0
for img in `ls SOURCE_FOLDER_W_GOOD_NAMES/*.png`; do
        mv $img DESTINATION_FOLDER_W_INCREMENT_NAMES/icon_$i.icns
        i=$((i+1));
done

答案3

使用值 1 而不是 0 初始化计数器,并在移动完成后增加它。然后,您不需要运行辅助 bash 脚本来重命名文件,您可以在原始脚本中解决它。

另外,为什么当你增加计数器时要添加“|| true”?它没有任何意义。试试这个代码

counter=1
for img in SOURCE_FOLDER/*.png; do
  mv "SOURCE_FOLDER/icon_$counter.icns" "DESTINATION_FOLDER/${img%.*}.icns"
  let counter++
done

相关内容