고쳐 쓰다

고쳐 쓰다

다음과 같은 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

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

관련 정보