Terminal pogryzł człowieka: gcp

Wszyscy uwielbiamy kopiować pliki – z katalogu do katalogu, z partycji na partycję, z dysku na dysk i tak dalej. Fascynujące zajęcie. Szczególnie, gdy ilość kopiowanych danych jest spora, a enigmatyczna czerń terminala i spokój kursora pogłębia w nas poczucie, że z wnętrza naszej maszyny dobiega złośliwy chichot i de facto nic się nie dzieje. W takich przypadkach możemy bez zahamowań sięgnąć po polecenie gcp, które stanowi panaceum na bolączki trapiące użytkowników dla których polecenie cp w standardowym wydaniu jest zbyt mało rozmowne. Kopiowanie z paskiem postępu – to jest przecież XXI wiek!

Minusem polecenie gcp jest fakt, że nie jest domyślnie dołączone chyba do żadnej z dystrybucji. Niemniej, bez problemów zainstalujemy je w Ubuntu/Xubuntu/Kubuntu/Mincie i pochodnych:

sudo apt-get install gcp

… jak i w Manjaro/Archu i pochodnych:

yaourt -S gcp

Jak korzystać z gcp? Zasadniczo, podobnie jak z cp do tej pory:

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -r, --recursive       copy directories recursively
  -f, --force           force overwriting of existing files
  --preserve=PRESERVE   preserve  the  specified  attributes
  -L, --dereference     always follow symbolic links in sources
  -P, --no-dereference  never follow symbolic links in sources
  --no-fs-fix           don't fix filesystem name incompatibily
  --no-progress         deactivate progress bar
  -v, --verbose         Show what is currently done

  sources saving:
    --sources-save=SOURCES_SAVE
                        Save source arguments
    --sources-replace=SOURCES_REPLACE
                        Save source arguments and replace memory if it already
                        exists
    --sources-load=SOURCES_LOAD
                        Load source arguments
    --sources-del=SOURCES_DEL
                        delete saved sources
    --sources-list      List names of saved sources
    --sources-full-list
                        List names of saved sources and files in it

Czyli pliki kopiujemy bez parametrów, katalogi z parametrem -r, -v wyświetli nieco więcej informacji o poczynaniach programu, -L i -P obsłużą dowiązania i tak dalej. Nowością jest wygląd całego procesu kopiowania, podczas którego otrzymamy informację co się dzieje i jak długo to potrwa:

$ gcp -r duzo_plikow/ duzo_plikow_bak
Copying 154.42 MiB 54% |##########################################...........................| 210.61 MB/s Time: 0:00:01

Innowacyjna jest również lista źródłowych plików, które możemy zapisać za pomocą parametru –sources-save=Nazwa.

$ gcp -r --sources-save=kernel /usr/src/kernel-3.12 /usr/src/kernel_bak
(...)

Wydane w ten sposób polecenie nie tylko skopiuje pliki ze wskazanej lokalizacji, ale i zapisze gotowca o nazwie ‘kernel’ wskazującego na lokalizację /usr/src/kernel-3.12. W przyszłości wszelkie machinacje z tymi plikami będziemy mogli przeprowadzać podając właśnie tę nazwę. Zapisane nazwy przypomni nam parametr –sources-full-list:

$ gcp --sources-full-list
Saved sources:
	[kernel]
		/usr/src/linux-3.12

… natomiast –sources-load=nazwa wykorzysta zapisaną ścieżkę jak źródło dla naszego kopiowania:

$ gcp -r --sources-load=kernel /usr/src/kernel_bak

Chyba nie muszę dodawać, jak powyższe skutecznie uwolni nasze pokłady szarych komórek przed zapamiętywaniem często pokrętnych ścieżek.