次の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
上記のフォルダのルートにあるコマンドラインでこれを行いました(上記はフォーマットされており、1行で書かれています)。
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
0の代わりに1の値でカウンタを初期化し、移動が完了した後にそれをインクリメントします。これにより、ファイル名を変更するためにセカンダリbashスクリプトを実行する必要がなくなり、元のスクリプトで問題を解決できます。
また、カウンタを増やすときに「||true」を追加するのはなぜですか?それは言葉ではありません。このコードを試してください
counter=1
for img in SOURCE_FOLDER/*.png; do
mv "SOURCE_FOLDER/icon_$counter.icns" "DESTINATION_FOLDER/${img%.*}.icns"
let counter++
done