2016-01-26 89 views
1

我正在OSX計算機上創建一個bash腳本以創建打印工具包。 該腳本正常工作,因爲它將正確的文件副本數量設置爲正確的目標。循環創建副本

但是,「打印翻錄」的目的地是以「先入先出」的原則提供文件。我的腳本似乎是通過文件製作每個文件的副本。我想它,使文件的整個「包」的副本,進行下一個副本之前...

腳本,使副本的順序現在:

File1-Copy1.jpg 
File1-Copy2.jpg 
File2-Copy1.jpg 
File2-Copy2.jpg 

我想要的順序腳本,使副本:

File1-Copy1.jpg 
File2-Copy1.jpg 
File1-Copy2.jpg 
File2-Copy2.jpg 

我現在的劇本是這樣的:

for filename in $(find $scriptdir -iname '*-F_*' -o -name '*.jpg' -print) 
do 
    for f in $(eval echo "{1..$copies}"); do 
     cp /$scriptdir/FILER/${filename##*/} $printdir"/"$PrintColor"_"$f"_"${filename##*/}; 
    done 
done 

因此,在繼續下一個文件之前,我需要腳本來複制所有文件,而不是複製每個文件X次的次數,然後才能繼續執行下一個「集合」文件...

是否有人如何使其工作的想法?

+0

'爲我在{1..10};爲{1..10}中的j做;做mv {dir,newdir} /「file $ j-Copy $ i「; done; done'? – 123

+0

有沒有辦法用cp命令做到這一點? 我無法得到這個工作。謝謝,雖然:-) – Polle

回答

0

我明白了! 感謝您的輸入,傢伙...

我改變了代碼如下:

for setnumber in $(seq $copies); do 
for filename in $(find $filesdir -iname '*-F_*' -o -name '*.jpg' -print) 
do 
cp $filesdir/${filename##*/} $printdir"/"$PrintColor"_SET"$setnumber"_"${filename##*/}; done 
sleep 5 
done 


睡眠命令被添加,只是爲了確保前一組的所有副本已創建/時間戳,然後繼續下一個設置....

1

使用sort,例如:

for filename in $(find $scriptdir -name 'F*.jpg' -print|sort -t'/' -k2.11n) 
do 
    echo $filename 
    base=${filename##*/} 
    cp "filename" "$printdir/$PrintColor/$base" 
done 

注意排序使用場2(-k2.11)人物11進行排序。這假定只有一個主要目錄名稱。如果你的路徑更復雜,你可能需要調整它。

+0

仍然沒有工作: -/ 但是,我意識到我犯了一個錯誤,對不起。我忘了寫這個變量$ antal(現在變成$ copies,是我應該打印的集數)。 因此,腳本獲取需要製作的套件/副本的數量,然後它應該使文件成爲以前的書面形式。 – Polle