W przypadku pojedynczych plików możesz użyć tee
do skopiowania do wielu miejsc:
cat <inputfile> | tee <outfile1> <outfile2> > <outfile3>
lub jeśli wolisz wersję demoggified:
tee <outfile1> <outfile2> > <outfile3> < <inputfile>
Zauważ, że jak Dennis wskazuje w tee
wynikach komentarzy, stdout
a także na wymienione pliki, dlatego też w powyższych przykładach użyj przekierowania, aby wskazać plik 3. Możesz również przekierować to do /dev/null
poniższego - ma to tę zaletę, że lista plików jest bardziej spójna w wierszu poleceń (co może ułatwić skrypty rozwiązanie dla zmiennej liczby plików), ale jest nieco mniej wydajna (chociaż różnica wydajności jest niewielka: mniej więcej taka sama jak różnica między używaniem cat
wersji lub wersji bez cat
):
cat <inputfile> | tee <outfile1> <outfile2> <outfile3> > /dev/null
Prawdopodobnie można połączyć jeden z powyższych z find
dość łatwo operować na wielu plikach w jednym katalogu, a mniej łatwo na plikach rozproszonych w strukturze katalogów. W przeciwnym razie możesz po prostu ustawić równolegle wiele operacji kopiowania jako osobne zadania i mieć nadzieję, że pamięć podręczna dysku systemu operacyjnego jest jasna i / lub wystarczająco duża, że każde z równoległych zadań używało buforowanych danych odczytu od pierwszego zamiast powodowania napędu lanie.
DOSTĘPNOŚĆ: tee
jest powszechnie dostępna w standardowych konfiguracjach Linuksa i innych systemach uniksowych lub podobnych, zazwyczaj jako część pakietu „coreutils” GNU. Jeśli używasz systemu Windows (twoje pytanie nie określa), powinieneś go znaleźć w różnych portach systemu Windows, takich jak Cygwin.
INFORMACJE O POSTĘPIE: Ponieważ kopiowanie dużego pliku z nośnika optycznego może zająć trochę czasu (lub w wolnej sieci lub nawet większy plik z nawet lokalnego szybkiego nośnika), informacje o postępie mogą być przydatne. W wierszu polecenia I mają tendencję do używania widza pipe (dostępny w większości dystrybucji Linuksa i wielu kolekcjach portowych Windows i łatwo samemu skompilować gdzie nie bezpośrednio) do tego - po prostu wymienić cat
się pv
tak:
pv <inputfile> | tee <outfile1> <outfile2> > <outfile3>
tee
będzie również wyprowadzany na standardowe wyjście, więc możesz to zrobić,tee outputfile1 outputfile2 < inputfile > /dev/null
ponieważ wysyłanie pliku binarnego do terminala może być hałaśliwe i powodować problemy z jego ustawieniami.tar cf - file1 file2 | tee >(tar xf - -C ouput1) | tar xf - -C output2