2012-11-11 88 views
1

我有一個文件夾,其中包含幾百個文件夾與圖像,每個文件夾內有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 

我試圖將4個圖像合併爲一個使用imagemagick。謝謝!

回答

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