2011-11-17 7 views
0

私はここで最初の投稿ですが、私はここで非常に頻繁に解決策を求めて来ました! 私の質問に対する答えが見つかりませんでした。たぶん、私は検索で間違ったタグを使用しています:/とにかく、質問が以前に尋ねられた場合は、事前に私を許してください。ファイルのリストを自動的に分割する

フォルダから写真や動画を自動的にアップロードするための小さなスクリプトを作成したいと考えています。私は現在、macportsディレクトリにある "flickr_upload"というperlスクリプトを使用しています。

ディレクトリに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 - 

答えて

1

xargsはこれを行うことができます。

たとえば、seq 10 | xargs echoはすべて10個の「引数」を一度にエコーします。しかし、一度に3 seq 10 | xargs -n 3 echo行います

1 2 3 
4 5 6 
7 8 9 
10 

私はflickr_uploadについて何も知らないか、「MacPortsのは、」かもしれないもの、しかし、おそらくあなたがこれを行うことができます:あなたの場合は

ls *jpg | xargs -n 3 flickr_upload

+0

チップをありがとう!確かに、それはnの正しい値を計算するためにモジュロ+ 1を計算する必要があるが、私が望んだことをする) – caccialdo

+0

MacポートはUNIXスタイルのポートシステムに非常に似ているが、OS Xに移植されている。 –

1

をあなただけのuploaしたい場合は

seq 100 | parallel -X -j 3 echo 

:GNUパラレルhttp://www.gnu.org/software/parallel/あなたはモジュロ+ 1を計算する必要はありませんインストールされています並行してD 3(3はすべての時間を実行している):

seq 100 | parallel -j 3 echo 

あなたは単にによってGNUパラレルをインストールすることができます。

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

より多くを学ぶためにGNUパラレルためのイントロビデオを見る: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

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

そして:

1

xargsが複数のスレッドを実行することができますここではバケッティングの方法は次のとおりです。

seq 1 10 | xargs -I {} bash -c "echo {} >> bucket_\$((\$RANDOM % 4))" 
head bucket_* 
seq 0 3 | xargs -I {} rm bucket_{} 
関連する問題