Komendy Linux: Kopiowanie plików oraz katalogów

W systemie Linux kopiowanie plików i katalogów wykonuje się za pomocą jednego polecenia - cp - wraz z odpowiednimi parametrami. Ogólnie składnia tego polecenia określa element, który zamierzamy skopiować, oraz miejsce, w którym ma się znaleźć kopiowany element:
user@linux:~$ cp plik1 katalog1
W tym wypadku chcemy skopiować plik o nazwie plik1 do katalogu katalog1. Jeżeli nie podamy nazwy elementu źródłowego, tak jak w powyższym przykładzie, element zostanie skopiowany z taką samą nazwą. Jeżeli podamy nazwę, która ma być nadana kopii elementu, uzyskamy kopię z właściwą nazwą.
user@linux:~$ cp plik1 katalog1/plik2
plik2
W tym wypadku chcemy skopiować plik o nazwie plik1 do katalogu katalog1, ale kopia będzie nosić nazwę plik2. Efekt jest podobny do tego jak na rysunku poniżej. Parametry polecenia (cp):
  • - b [metoda] , --backup [=metoda]
  • Jeżeli kopiujemy element do danej lokalizacji, w której znajduje się już plik o identycznej nazwie, wówczas zostanie on nadpisany przez plik, który obecnie kopiujemy; spowoduje to utratę zawartości nadpisanego pliku. Jeśli jednak użyjemy parametru - b w analogicznym przypadku, plik istniejący już w danej lokalizacji zostanie zapisany jako kopia zapasowa. Spróbujmy zatem skopiować plik o nazwie plik1 do katalogu katalog1, w którym istnieje już plik o tej nazwie. Jak widzimy, mamy teraz dwa takie pliki. Jeden to plik oryginalny, zapisany jako kopia, a drugi to plik przed chwilą przez nas skopiowany.
    user@linux:~$ cp -b plik1 katalog1
    plik1 plik1~
  • -d , --no-dereference
  • Użycie parametru powoduje kopiowanie dowiązań symbolicznych zamiast elementów, na które te dowiązania wskazują.
  • -f , --force
  • Jeżeli w katalogu, do którego kopiujemy plik, istnieje już plik o identycznej nazwie, po użyciu tego parametru zostanie on nadpisany bez wyświetlenia jakiegokolwiek pytania.
    user@linux:~$ cp -f plik1 katalog1
  • -i , --interactive
  • Jeżeli w katalogu, d o którego kopiujemy plik, występuje element o identycznej nazwie, system „zapyta", czy chcemy go zastąpić plikiem, który kopiujemy. Odpowiadamy, naciskając klawisz y dla potwierdzenia lub jakikolwiek inny, aby zaprzeczyć.
    user@linux:~$ cp -i plik1 katalog1
  • -l , --link
  • Za pomocą tego parametru zamiast kopiować element, tworzy się jego dowiązanie twarde.
  • -p , --preserve
  • Przy kopiowaniu plików każdy z nich traci swoje prawa dostępu, właściciela i grupę oraz czas utworzenia. Wartości te są ustawiane zgodnie z elementem, do którego kopiujemy plik. W przypadku zastosowania omawianej opcji oryginalne prawa i wszelkie inne dane dotyczące kopiowanego pliku są zachowywane.
  • -r
  • Zastosowanie tego parametru pozwala na kopiowanie rekurencyjne całych katalogów i ich zawartości wraz z zachowaniem ich struktury.
  • -R , --recursive
  • Użycie komendy wraz z parametrem pozwala kopiować ekurencyjnie katalogi i ich całe struktury, dodatkowo zachowując wszelkie elementy niebędące plikami.
  • - S przyr_kopii , --suff1x=przyr_kopii
  • Jeżeli kopiujemy element wraz z opcją -b, zostaną utworzone kopie zapasowe tych plików, które istnieją już w danej lokalizacji. Dzięki podanej tu opcji możemy dodatkowo ustalić własną nazwę sufiksu dla tych plików:
    user@linux:~$ cp -b -S _kopia * katalog1
    user@linux:~$ ls katalog1
    plik1 plik1_kopia plik2 plik2_kopia plik3 plik3_kopia
  • -v , --verbose
  • Zastosowanie parametru pozwala wyświetlić informacje o każdym pliku, który został skopiowany.
    user@linux:~$ cp -v * katalog1
    ' plik1 ' -> ' katalog1/plik1 '
    ' plik2 ' -> ' katalog1/plik2 '
    ' plik3 ' -> ' katalog1/plik3 '