이미지 복사 및 이름 바꾸기

이미지 복사 및 이름 바꾸기

나는 Manjaro Gnu/Linux를 사용하고 있으며 files이 디렉토리 아래에는 dir1, dir2, dir3, dir4... 와 같은 이름을 가진 약 650개의 하위 디렉토리가 있습니다.

각 하위 디렉터리에는 서로 다른 수의 .jpg이미지가 있습니다(예: 2~11개). 예를 들어, dir1하위 디렉토리 아래에 이미지는 imgaf001.jpg및 입니다 srep0001.jpg.

all_images이미지의 이름을 해당 하위 디렉터리의 이름으로 바꿀 수 있도록 이러한 모든 이미지를 새 디렉터리 이름에 복사하는 명령/스크립트를 작성하고 싶습니다 .

예를 들어, dir1하위 디렉토리 의 경우 imgaf001.jpg다음으로 변경 dir1_1.jpg하고 srep0001.jpg다음으로 변경합니다 dir1_2.jpg(밑줄 뒤에 이미지 수가 표시됨).

이 목표를 어떻게 달성할 수 있나요?

감사해요

답변1

다음 디렉터리에서 이 스크립트를 실행할 수 있습니다 files.

mkdir all_images
find -type f -name '*.jpg' -exec sh -c '
    c=1
    for f in "$@"; do
        pdir=${f%/*}
        pdir=${pdir##*/} #Now pdir conains the parent directory name
        cp -- "$f" "all_images/${pdir}_${c}.jpg"
        c=$((c+1))
    done
' findsh {} +

이미지가 포함된 디렉터리 예:

$ ls dir*
dir1:
asj.jpg  assa.jpg

dir2:
kasj.jpg  kkl.jpg

스크립트가 실행된 후:

$ ls all_images/
dir1_1.jpg  dir1_2.jpg  dir2_3.jpg  dir2_4.jpg

결과가 가 되도록 소스 디렉터리가 변경될 때 카운터를 다시 시작하려면 dir1_1.jpg dir1_2.jpg dir2_1.jpg dir2_2.jpgfor 루프에서 몇 가지 조정을 수행합니다.

mkdir all_images
find -type f -name '*.jpg' -exec sh -c '
    for f in "$@"; do
        pdir=${f%/*}
        pdir=${pdir##*/} #Now pdir conains the parent directory name
        [ "$pdir" != "$oldpdir" ] && c=1
        cp -- "$f" "all_images/${pdir}_${c}.jpg"
        oldpdir=$pdir
        c=$((c+1))
    done
' findsh {} +

관련 정보