Разделение списка файлов автоматически - PullRequest
0 голосов
/ 17 ноября 2011

Это мой первый пост здесь, хотя я очень часто приходил сюда за решениями! Я не мог найти ответ на вопрос, который у меня есть. Возможно, я использую неправильные теги в своем поиске: / В любом случае, пожалуйста, простите меня заранее, если вопрос был задан ранее.

Я хочу создать небольшой скрипт для автоматической загрузки фотографий и видео из папки. В настоящее время я использую Perl-скрипт с именем "flickr_upload", который находится в каталоге macports.

Допустим, у меня есть 12 файлов в каталоге. Я хочу разделить эти 12 файлов на 3 пакета по 4 файла и запустить 3 командной строки параллельно, например, с помощью xterm.

Как автоматически разбить список, просто указав количество пакетов?

Привет

Редактировать: вместо записи:

flickr_upload photo01.jpg photo02.jpg photo03.jpg

Я бы хотел иметь:

flickr_upload photo01.jpg
flickr_upload photo02.jpg
flickr_upload photo03.jpg

написав что-то вроде:

split -n 3 ./*.jpg | xterm flickr_upload -

Ответы [ 3 ]

1 голос
/ 18 мая 2012

Если у вас установлен GNU Parallel http://www.gnu.org/software/parallel/, вам не нужно вычислять модуль + 1:

seq 100 | parallel -X -j 3 echo

Если вы просто хотите загрузить 3 параллельно (при 3 постоянно работающих):

seq 100 | parallel -j 3 echo

Вы можете установить GNU Parallel просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вступительные видеоролики для GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

1 голос
/ 22 января 2015

xargs может запускать несколько потоков:

cat list_of_files | xargs --max-procs 6 -I {} upload_file {}

А вот как ведро складывается:

seq 1 10 | xargs -I {} bash -c "echo {} >> bucket_\$((\$RANDOM % 4))"
head bucket_*
seq 0 3 | xargs -I {}  rm bucket_{}
1 голос
/ 17 ноября 2011

xargs может сделать это за вас.

например, seq 10 | xargs echo выводит все 10 "аргументов" одновременно.Но seq 10 | xargs -n 3 echo делает их по 3 за раз:

1 2 3
4 5 6
7 8 9
10

Я ничего не знаю о flickr_upload или о том, что может быть "macports", но, вероятно, вы можете сделать это:

ls *jpg | xargs -n 3 flickr_upload

...