循环创建副本

时间:2016-01-26 10:25:02

标签: macos bash for-loop

我正在OSX计算机上制作一个bash脚本来创建一个打印套件。 该脚本工作正常,因为它可以将正确数量的文件副本发送到正确的目标。

然而,目的地'打印翻录'为文件提供先进先出'原理。我的脚本似乎是按文件制作每个文件的副本。我希望它能复制整个套件'的文件,然后继续下一个副本......

脚本现在制作副本的顺序是:

$merged_array = array();
$merged_array[] = $data;
$merged_array[] = $values;
print json_encode($merged_array,JSON_PRETTY_PRINT);

我希望脚本制作副本的顺序是:

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

我当前的脚本如下所示:

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

因此,在继续下一个文件之前,我不需要复制每个文件X次,而是需要脚本来复制所有文件,然后再继续下一个“设置”。文件...

有没有人知道如何让它发挥作用?

2 个答案:

答案 0 :(得分: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进行排序。这假定只有一个前导目录名称。如果你的路径更复杂,你可能需要调整它。

答案 1 :(得分: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


添加sleep命令只是为了确保上一组的所有副本都已创建/加时间戳,然后再进行下一组....