나는 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.jpg
for 루프에서 몇 가지 조정을 수행합니다.
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 {} +