这是我在这里的第一篇文章,虽然我经常来这里寻求解决方案! 我无法找到问题的答案。也许我在我的搜索中使用了错误的标签:/无论如何,如果以前问过这个问题,请提前原谅我。
我想创建一个小脚本来自动上传文件夹中的照片和视频。我目前使用名为“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 -
答案 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_{}