Adunând informații din mai multe surse, există câteva opțiuni.
Concluzia este că numai cu comanda paralel s-ar putea să obții ceea ce îți dorești, vezi mai jos.
Notite importante:
- Am facut teste cu
cp pentru copiere.De asemenea, ar trebui să luați în considerare accelerarea (sau scăderea!) obținută cu rsync vs cp sau alte comenzi alternative, combinate cu paralel.
- Am testat copierea unui singur fișier. Rezultatele se pot schimba dacă copiați mai multe fișiere (de exemplu, combinând câteva fișiere mari, după cum aveți nevoie, cu multe alte fișiere și subdirectoare mici).
timp <opțiunea #N, copierea către o țintă>
timp <opțiunea #N, copierea la două ținte>
pentru a obține o comparație, cu un fișier de 1.2Gb.
Mai mult, în unele cazuri am testat de două sau trei ori aceeași comandă, pentru a evalua dispersia în rezultate.
Nu am calculat medii și abateri standard, dar rezultatele sunt evidente.
Asta am obtinut in conditiile de testare specificate mai sus, cu scurte comentarii.
Am concatenat într-un singur rând rezultatele testelor multiple, ori de câte ori sunt disponibile.
The caz de baza:
$ time cp -p sursă/fișier1 țintă1/
real 0m0.846s 0m0.680s 0m0.659s
utilizator 0m0.000s 0m0.001s 0m0.016s
sys 0m0,777s 0m0,662s 0m0,643s
The opțiuni de copiere:
Opțiune paralel
$ paralel cp -p sursă/fișier1 ::: țintă1/
real 0m0,745s 0m0,740s
utilizator 0m0,121s 0m0,108s
sys 0m0,609s 0m0,619s
$ paralel cp -p sursă/fișier1 ::: target1/ target2/
real 0m0,794s 0m0,860s
utilizator 0m0,116s 0m0,134s
sys 0m1.300s 0m1.380s
Opțiune tricou (anexând > /dev/null pentru a evita ieșirea către stdout)
$ tee target1/file1 < sursă/fișier1 > /dev/null
real 0m0.874s 0m1.040s 0m1.028s
utilizator 0m0,160s 0m0,172s 0m0,137s
sys 0m0,714s 0m0,868s 0m0,887s
$ tee target1/file1 target2/file1 < sursă/fișier1 > /dev/null
real 0m1.802s 0m1.680s 0m1.833s
utilizator 0m0,136s 0m0,212s 0m0,197s
sys 0m1.642s 0m1.468s 0m1.619s
Copiere la doi ţintăs dublează aproximativ timpul pentru unul ţintă, care este puțin mai mare decât timpul pentru caz de baza.
Opțiune xargs
$ echo target1 | xargs -n 1 cp -p sursă/fișier1
0m0,666s reale
utilizator 0m0,021s
sys 0m0,646s
$ echo target1 target2 | xargs -n 1 cp -p sursă/fișier1
0m1,197s reale
utilizator 0m0,018s
sys 0m1,173s
Copiere la doi ţintăs dublează aproximativ timpul pentru unul ţintă, care este similar cu timpul pentru caz de baza.
Opțiune găsi
$ find target1 -exec cp -p source/file1 {} \;
0m2,167s reale
utilizator 0m0,017s
sys 0m1.627s
$ find target1 target2 -exec cp -p source/file1 {} \;
0m3,905s reale
utilizator 0m0,020s
sys 0m3,185s
Copiere la doi ţintăs dublează aproximativ timpul pentru unul ţintă, care este mult mai mare decât timpul pentru caz de baza... un învins clar.
Surse pentru „copiere multiple”:
- https://www.cyberciti.biz/faq/linux-unix-copy-a-file-to-multiple-directories-using-cp-command/
- Cum să copiați un fișier în mai multe foldere folosind linia de comandă?
- https://stackoverflow.com/questions/195655/how-to-copy-a-file-to-multiple-directories-using-the-gnu-cp-command
Surse de performanță cp vs. rsync:
- https://unix.stackexchange.com/questions/91382/rsync-is-very-slow-factor-8-to-10-compared-to-cp-on-copying-files-from-nfs-sha
- https://lwn.net/Articles/400489/
- https://superuser.com/questions/1170636/why-is-there-a-write-speed-difference-between-dd-cp-rsync-and-macos-finder-to
- Care este diferența dintre `cp` și `rsync`?