jak skopiować katalog i jego zawartość do nowej lokalizacji pod nową nazwą katalogu?

52

Jestem nowy w wierszu poleceń Linuksa i próbuję w tej chwili poradzić sobie z poleceniem kopiowania.

Czy ktoś może mi powiedzieć, czy jest możliwe skopiowanie katalogu z jego podkatalogami i powiązanymi plikami do nowego katalogu o nowej nazwie, np. Directory_backup?

Dzięki za wszelką pomoc z góry

Edmuntu
źródło

Odpowiedzi:

69

Używasz -r(kopiuj rekurencyjnie) i podajesz nową nazwę

cp -r /path/to/directory /path/to/location/new-name

zamień na prawdziwe ścieżki ... na przykład, aby skopiować stuffz mojego katalogu domowego do istniejącego katalogu backupi nazwać nowy katalog stuff-backup(jeśli ten katalog już istnieje, pamiętaj, że stuffzostanie on skopiowany do niego, nie zastępuj go).

cp -r ~/stuff ~/backup/stuff-backup

~jest skrótem do twojego katalogu domowego /home/$USERlub /home/zannaw moim przypadku. Możesz go pominąć, jeśli bieżący katalog roboczy jest katalogiem domowym - możesz to zobaczyć z poziomu monitu

zanna@monster:~$
              ^--the ~ here is where I am - home!

Możesz dodać -vpełną flagę, aby cpraport był wykonywany dla każdej wykonywanej kopii ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Zanna
źródło
Przepraszam Zanna. Wykorzystam twoją radę w praktyce i zobaczę, jak pójdę. Podobnie jak pomysł pełnej flagi. zakładamy, że będzie to również działało jako raport, podczas gdy inne polecenia są przetwarzane. Pozdrawiam.
Edmuntu,
@Edmuntu przepraszam za co? Tak, wiele poleceń ma flagę -vlub --verbose:)
Zanna
przepraszam za początkowe krótkie „dziękuję” .... wciśnij klawisz powrotu błędnie.
Edmuntu,
10

Polecenie, którego potrzebujesz, oznacza po prostu cp„kopiuj”.

Możesz go użyć na przykład z jedną z następujących składni:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

Pierwszy wariant umożliwia określenie nowej nazwy pliku docelowego, natomiast drugi wariant tworzy kopię o tej samej nazwie w katalogu docelowym. Oczywiście musisz najpierw zastąpić symbole zastępcze dużymi literami prawidłowymi ścieżkami.

Jednak cpdomyślnie działa tylko na plikach, a nie na katalogach. Aby zmusić go do skopiowania pełnego katalogu z całą zawartością rekurencyjnie, musisz dodać -ropcję:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Możesz dowiedzieć się więcej o cppoleceniu, wpisując man cpterminal.

Bajt Dowódca
źródło
Nie przyzwyczajony do tej sekcji komentarza Byte Commander ... naciskaj klawisz Return, aby zmienić linię, ale zamiast tego pisz. Bardzo jasny zarys w twojej odpowiedzi. Z niecierpliwością czekam na uporządkowanie tych katalogów, skoro otrzymałem dobrą instrukcję dotyczącą prawidłowego korzystania z dostępnych narzędzi. Doskonały.
Edmuntu,
@Edmuntu W przyszłości użyj klawiszy SHIFT + ENTER podczas komentowania, aby przejść w dół linii.
TheOdd
@OwenHines Tylko komentarze usuwają wszelkie podziały wierszy i dodatkowe białe znaki, a umieszczenie ich w edytorze nic nie zmienia w wyniku.
Bajt Dowódca
@ByteCommander No tak, nieważne. Cóż, teraz wie.
TheOdd
6

Jako alternatywę dla ogólnie użytecznej komendy cp możesz użyć rsync, który ma dodatkową zaletę replikacji uprawnień / znaczników czasu oryginalnej struktury katalogów:

rsync -av dir/ newdir

-a archiwum -v pełne

zwróć uwagę na ukośnik po źródłowym reż.

slowko
źródło
5

Łatwiej jest mi przejść do katalogu, z którego najpierw kopiuję. W tym przykładzie przejdź do katalogu, do którego wszyscy dzwonili /boot. Każdy może skopiować i wkleić poniższe polecenia do swojego terminalu.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Dla cppolecenia bieżący katalog jest identyfikowany jako .którym jest /bootkatalog zmieniliśmy się. Ta -ropcja powoduje, że rekurencyjne jest dołączanie wszystkich podkatalogów.

Aby upewnić się, że działało, uruchom dulistę wszystkich podkatalogów i całkowitych rozmiarów plików w nowym katalogu /boot_backupw tym przypadku.

Po zakończeniu tej sudo rm -r /boot_backupinstrukcji użyj :, aby usunąć nowy katalog i jego podkatalogi.

WinEunuuchs2Unix
źródło
1
Chociaż wyjaśnia to, jak skopiować wszystkie pliki z bieżącego katalogu do innego katalogu, nie w pełni odpowiada na pytanie OP dotyczące sposobu skopiowania katalogu (i jego zawartości) do katalogu o innej nazwie. Istnieją krótsze polecenia (takie jak cp -r), które zajmą się tworzeniem nowego katalogu i kopiowaniem do niego wszystkich plików
BlueCacti
1
Wyjaśnia, jak kopiować i reżim oraz jego zawartość - różnica polega na tym, że najpierw zmienia katalog źródłowy jako nawyk ostrożności. cp -rzgodnie z zaleceniami znajduje się już w trzecim wierszu poleceń. Samouczek opiera się na fakcie, że każdy ma /bootkatalog i może wypróbować go na swoim komputerze. Gdybym użył cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backupczytników, nie mogliby skopiować i wkleić do swojego terminala - zmieniliby się, GroundZerotworząc więcej pracy i szanse na błąd. Mam nadzieję, że doceniasz KISS tej odpowiedzi dzięki wbudowanemu samouczkowi.
WinEunuuchs2Unix,
1
@GroundZero robi a, cd ~/Documents/SomeObsucreFolder/2016/Nov/aby ustawić bieżący katalog jako katalog źródłowy, zmieni monit w Terminalu, aby upewnić się, że jest poprawnie napisany, a następnie użycie cp -r .jako źródła eliminuje ponowne wpisywanie katalogu źródłowego. To po prostu to, co uważam za dobry nawyk. Dodatkowo raz na zmianę katalogu źródłowego jest to łatwe do zrobienia ls FIleName1, ls FileName2itp do esnure żądanych plików do kopii zapasowej są tam bez konieczności powtarzania nazwy katalogu źródłowego dla lskomendy.
WinEunuuchs2Unix,
5

Możesz użyć poniższego polecenia, aby skopiować katalog z jednego miejsca do innego podkatalogu.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Objaśnienie polecenia:

  • -R = kopiuj katalogi rekurencyjnie
  • v = wyjaśnij, co się dzieje
  • p = Pomoże ci zachować twoją zgodę i własność dzięki znacznikom czasu
Rakesh C
źródło
Dziękuję @Rakesh Chauhan. „Zachowaj swoje pozwolenie i własność dzięki znacznikom czasu” ??? Wow .... muszę się do tego dostać !!!! Jeszcze jeden aspekt poleceń linii do zbadania. Dziękuję za odpowiedź.
Edmuntu,
4

cpto polecenie, które pełni funkcję, której szukasz. To oznacza kopię i właśnie to robi. Polecenie, które zadziałałoby w tej sytuacji, to:

cp -R source/ destination/

Spowoduje to skopiowanie source/folderu i wszystkich jego podkatalogów do destination/.

Jeśli destination/nie istnieje, zostanie utworzony.

-RFlaga stoi rekurencyjnej, która mówi cp, aby skopiować wszystkie podkatalogi.

Dziwne
źródło
Dziękuję @ Owen Hines. Wygląda na to, że to zdecydowanie polecenie mojego zadania. Cheers
Edmuntu,
1
@Edmuntu Cieszę się, że mogłem pomóc, jeśli znalazłeś rozwiązanie swojego problemu, czy możesz zaznaczyć odpowiedź, która była dla Ciebie odpowiednia, klikając znacznik wyboru pod nią? Pomoże to ostrzec innych, którzy przeglądają stronę o rozwiązanym pytaniu.
TheOdd
1

Zasadniczo chcesz zachować takie same uprawnienia do plików podczas tworzenia kopii, a nie nowy zestaw domyślnych uprawnień do tworzenia. Oznacza to użycie opcji -a dla cp.

cp -a file filenew
Robi
źródło