自动拆分文件列表

时间:2011-11-17 18:32:46

标签: bash list split parallel-processing multitasking

这是我在这里的第一篇文章,虽然我经常来这里寻求解决方案! 我无法找到问题的答案。也许我在我的搜索中使用了错误的标签:/无论如何,如果以前问过这个问题,请提前原谅我。

我想创建一个小脚本来自动上传文件夹中的照片和视频。我目前使用名为“flickr_upload”的perl脚本,可在macports目录中找到。

假设我在目录中有12个文件。我想将这12个文件分成3批4个文件并使用xterm并行启动3个命令行。

如何通过指定批次数自动拆分列表?

此致

编辑:而不是写作:

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果安装了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

答案 2 :(得分:1)

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_{}