Artur Pyszczuk's blog...

"Cuda się zdarzają. Potwierdzi to każdy programista."
roflcopter.pl
/home/linux/commands/cp/

cp - Kopiowanie plików (katalogów)

Aby kopiować pliki lub katalogi za pomocą konsoli musimy użyć polecenia cp. Polecenia tego można użyć w trzech wariantach, tak więc poniżej pokazany został możliwy sposób użycia:

$ cp [opcje] [-T] źródło cel

$ cp [opcje] źródło katalog

$ cp [opcje] -t katalog źródło

W gruncie rzeczy kopiowanie jest bardzo proste. W najbardziej podstawowym użyciu polega na podaniu dwóch argumentów, z czego pierwszy to plik (lub pliki), który ma zostać skopiowany, a drugi to miejsce do którego ma zostać skopiowany. Jeśli drugim argumentem jest nazwa pliku, to pierwszy plik zostanie skopiowany do drugiego (należy pamiętać, że podczas kopiowania nie wyskakuje żadne pytanie, czy napewno chcemy plik podmienić/nadpisać, jeśli już o takiej samej nazwie istniał wcześniej). Na poniższym rysunku zostało to pokazane.

Polecenie cp
Rys 1. Polecenie cp - kopiowanie plików.


Jeśli chcemy, aby nasz plik (pliki) zostały skopiowane do katalogu, to jako drugi argument (katalog) podajemy nazwę katalogu. Oczywiście tutaj tak samo jak w przypadku polecenia cd, możemy podać ścieżkę względną, lub bezwzględną.

Polecenie cp
Rys 2. Polecenie cp - kopiowanie plików do katalogu.


Można wpisywać nazwy wszystkich plików, które mają zostać skopiowane, lecz za pomocą znacznika wieloznaczności nie musimy wpisywać wszystkich nazw, co zostało pokazane. Nie ma znaczenia, czy po nazwie katalogu postawimy ukośnik, czy nie, lecz ukośnik bardziej uwypukla, że kopiujemy pliki do katalogu.
Polecenie cp w prostym użyciu nie kopiuje katalogów. Możemy wymusić skopiowanie katalogu np. za pomocą opcji -r (ang. recursively). Sposób kopiowania katalogu z zawartością został pokazany poniżej.

Polecenie cp
Rys 3. Polecenie cp -r - kopiowanie katalogu z zwartością.


Do tej pory pokazany został sposób kopiowania plików i katalogów za pomocą drugiego wariantu polecenia cp. W tym miejscu pokażę jak się kopiuje również z użyciem ostatniego. Z opcją -t najpierw podajemy nazwę katalogu, do którego mają zostać skopiowane pliki, a następnie listę kopiowanych plików.

Polecenie cp
Rys 4. Polecenie cp -t - kopiowanie plików do katalogu (drugi sposób).


W momencie, gdy chcemy skopiować plik i nazwać go tak jak nazywa się jeden z plików będących w katalogu do którego kopiujemy oraz tego drugiego pliku nie można otworzyć do pisania proste użycie polecenia cp zawiedzie. Aby dokonać tego, musimy użyć opcji -f / --force.

Polecenie cp
Rys 5. Polecenie cp -f - Podmienianie pliku, który nie ma praw do zapisu.


Jeśli chcemy skopiować dowiązanie symboliczne jako dowiązanie, a nie to na co ono wskazuje to musimy użyć opcji -d. Jeśli skopiowalibyśmy normalnie z użyciem najprostszej formy polecenia cp to skopiowalibyśmy plik, na który to dowiązanie wskazywało.

Polecenie cp
Rys 6. Polecenie cp -d - Kopiowanie dowiązania symbolicznego


Trzeba pamiętać o jeszcze jednej ważnej rzeczy. Dowiązanie, które zostało skopiowane do katalogu kat1 wskazuje na dowiązanie, które jest w katalogu z którego kopiowaliśmy (kat3), a to z kolei na plik5, który znajduje się w innej lokalizacji. Jeśli usuniemy dowiązanie znajdujące się w kat3, to dowiązanie, które skopiowaliśmy do kat1 nie będzie wskazywało już na plik5.

Jeśli chcemy mieć pewność, że podczas kopiowania nie dojdzie do zastąpienia pliku bez powiadomienia, to możemy użyć opcji -i / --interactive. Wtedy przy próbie nadpisania dostaniemy komunikat.

Polecenie cp
Rys 7. Polecenie cp -i - Kopiowanie z potwierdzeniem nadpisania


W momencie, gdy interesuje nas kopiowanie plików razem z atrybutami musimy użyć opcji -p / --preserve. Jeśli nie podamy żadnych argumentów do tej opcji, do standardowo ustawione zostaną opcje: mode, ownership, timestamps. Dodatkowo można ustawić następujące: contex, links, xattr, all. Jak widać, plik x_plik1 ma te same atrybuty, co plik plik1. Data utworzenia pliku jest taka sama, mimo, że ten drugi został utworzony w innym czasie.

Polecenie cp
Rys 8. Polecenie cp -p - Kopiowanie z wszystkimi atrybutami


Jeśli chcemy skopiować plik tylko z niektórymi atrybutami, to musimy je podać wpisując je do części polecenia. Na rysunku poniższym zostało to pokazane. Jak widać, data utworzenia pliku nie została włączona do kopiowanych atrybutów, dlatego też plik ma inną datę utworzenia.

Polecenie cp
Rys 9. Polecenie cp -preserve - Kopiowanie z częścią atrybutów


W przypadku, gdy chcemy skopiować plik razem z atrybutami, lecz pomijając jeden (lub więcej) atrybut, możemy skorzystać z opcji --no-preserve.

Polecenie cp
Rys 10. Polecenie cp --no-preserve - Kopiowanie bez konkretnego atrybutu


Za pomocą opcji --parents możemy zrobić ciekawą rzecz. Dajmy na to sytuację, w której plik o nazwie plik1 znajduje się w katalogu kat2/kat1/. Jeśli skopiujemy go z tym parametrem do katalogu dir1 to znajdzie się on w miejscu: dir1/kat2/kat1/plik1, co zostało pokazane na rysunku. Należy wspomnieć o tym, że dir1 musi być istniejącym katalogiem.

Polecenie cp
Rys 11. Polecenie cp --parents - Kopiowanie z pośredniczącymi katalogami


Jeśli chcemy, aby terminal informował nas o tym co robi podczas kopiowania musimy użyć opcji -v / --verbose. Zastosowanie tej opcji może być następujące.

Polecenie cp
Rys 12. Polecenie cp --verbose - Kopiowanie z informowaniem



Wiecej informacji na temat programu cp znajdziesz w podreczniku systemowym man.
Wpisujac w konsoli man cp

Wiecej informacji na temat programu cp znajdziesz również w programie info.
Wpisujac w konsoli info coreutils 'cp invocation'

Zobacz także:

Some rights reserved 2010 - 2015 Artur Pyszczuk

| Strona Główna | Kontakt |