2012-11-11 4 views
1

이미지가 포함 된 몇백 개의 폴더가있는 폴더가 있습니다. thous 폴더 각각에는 임의의 이름을 가진 4 개의 이미지가 있고, 모든 하위 폴더를 반복하며 4 개의 이미지 이름을 읽습니다. 각 하위 폴더의 것은 그들에이 명령을 실행bash를 사용하여 하위 디렉토리를 읽는 중

convert \($subdir/$file1.jpg $subdir/$file2.jpg -append \) \($subdir/$file3.jpg $subdir/$file4.jpg -append \) +append $subdir.jpg 

이 작동하는 방법이다 :

foreach(subdirectory in directory){ 
    $img_arr[] = new Array(); 
    foreach(file in subdirectory){ 
     $img_arr[] = file; 
    } 

    exec("convert \($subdirectory /$img_arr[0].jpg $subdirectory /$img_arr[1].jpg -append \) \($subdirectory/$img_arr[2].jpg $subdirectory/$img_arr[3].jpg -append \) +append $subdirectory.jpg"); 
} 

이것은 내가 지금까지 무엇을 가지고 있습니다 :

#!/bin/bash 

img=0; 

IFS=$'\n' 

for NAME in $(find -type f) 
    do 
    echo "Found a file: \"$NAME\"" 
done 

저는 imagemagick을 사용하여 4 개의 이미지를 하나로 결합하려고합니다. 감사!

답변

2

이 시도 :

for dir in * 
do 
    test -d $dir || continue 
    files=($dir/*.jpg) 
    convert \(${files[0]} ${files[1]} -append \) \(${files[2]} ${files[3]} -append \) +append $dir.jpg 
done 
+0

감사합니다! 그래서 이것은 다른 폴더의 이미지를 섞지 않을 것입니다, 맞습니까? – Kristian

+0

좋아, 이것은 단지 같은 디렉토리에있는 이미지를 결합합니다. –

+1

그것은 디렉토리 당'convert'를 한 번 실행하고,'convert'에 전달 된 모든 인수는 그 디렉토리에 있습니다. 그래서 다른 폴더의 이미지를 섞지 않을 것입니다. 그러나 위의 스크립트는 파일 이름에 공백이 있으면 작동하지 않습니다. –

1

귀하의 초기 접근 방식은 거의 괜찮다고, 몇 가지 변화 : 일

for dir in $(find . -type d); do 
    echo $dir; 
done 
관련 문제