2016-01-26 4 views
1

Я создаю сценарий bash на компьютере OSX на работе для создания набора отпечатков. Скрипт отлично работает, так как он делает правильное количество копий файлов в нужном месте.Петля для создания копий

Однако назначение, «копия печати», служит для файлов с принципом «первым в первом». Мой скрипт, похоже, делает копии каждого файла в файле. Я хочу, чтобы это сделать копию всего «набор» файлы, прежде чем перейти к следующей копии ...

Порядка скрипт делает копии теперь:

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

'для i в {1..10}; сделать для j в {1..10}; сделать 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 


добавляется команда сна только, чтобы убедиться, что все копии предыдущего набора было созданный/timestamped, прежде чем переходить к следующему набору ....

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 (теперь изменилась на $ copy, это количество наборов, которые я должен распечатать). Таким образом, скрипт получает входные данные о количестве наборов/копий, которые ему нужно сделать, а затем он должен делать файлы в прежней письменной форме ... – Polle

Смежные вопросы