![更新](https://linux22.com/image/88049/%E6%9B%B4%E6%96%B0.png)
我有 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