Jak mogę skopiować zawartość folderu do innego folderu w innym katalogu za pomocą terminala?


740

Próbuję skopiować zawartość folderu do innego folderu w innym katalogu za pomocą terminala.

Czy ktoś mógłby mi podać przykład składni wiersza poleceń wymaganej do osiągnięcia tego?

Odpowiedzi:


1115

Można skopiować zawartość folderu /sourcedo innego istniejącego folderu /destza pomocą polecenia

cp -a /source/. /dest/

Ta -aopcja to ulepszona opcja rekurencyjna, która zachowuje wszystkie atrybuty plików, a także zachowuje dowiązania symboliczne.

Na .końcu ścieżki źródłowej jest określona cpskładnia, która pozwala skopiować wszystkie pliki i foldery, w tym ukryte.


@enzotib Próbuję użyć tego polecenia, aby skopiować zawartość „Pobranych / tekstowych” do „~ / .config / inkscape / extensions /.” Za pomocą polecenia wpisuję „cp -a / Downloads / textext /. /~/.config/inkscape/extensions/.” ale to nie działa
Funzies

@Funzies: prawdopodobnie twoim poleceniem powinno być:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib

Dodaj -pflagę, aby zachować uprawnienia do plików i znaczniki czasu. cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade,

3
@DylanValade: -ajuż sugeruje --preserve=all, że jest szerszy niż -p = --preserve=mode,ownership,timestamps.
enzotib

1
@BennyNeugebauer: scpsłuży do kopiowania przez sieć (poprzez ssh) i szyfruje tylko kanał komunikacyjny, a nie pliki w docelowym systemie plików.
enzotib

129

Alternatywą jest rsync

rsync -r source/ destination

Zalety rsync to:

  1. Po początkowej synchronizacji skopiuje tylko te pliki, które uległy zmianie.

  2. Możesz go używać przez sieć, co jest wygodne dla plików w $ HOME, zwłaszcza plików konfiguracyjnych.


5
Myślę, że nie potrzebujesz gwiazdki. rsync -r source/ destinationpowinno wystarczyć, nie?
Joschua

1
Ten jest bardziej odpowiedni: „rsync -rtvp source / * destination”
shridutt kothari

-r nie działa dla ukrytych plików / folderów
Nam G VU

1
Nie spowoduje to skopiowania ukrytych plików, ponieważ bash rozwija * tylko do pliku nie ukrytego. Rozwiązanie @Joschua jest bezpieczniejsze.
sauerburger

rsync skopiuje cały katalog, w tym ukryte pliki, jeśli używasz końcowego / bez *, więc rync source/ destludzie będą musieli dostosować polecenie rsync, aby działało tak, jak chcą.
Panther

78

Powiedzmy, że masz folder o nazwie Folder1 w twojej ~wewnątrz folder1 jest 1 plik o nazwie plik1 i 2 foldery o nazwie sub1 i sub2 każdy z innych plików i folderów wewnątrz nich.

Aby skopiować całą zawartość ~/folder1do ~/new_folder1użyłbyś

cp -r ~/folder1/. ~/new_folder1

new_folder1zawierałby wtedy wszystkie pliki i foldery z folder1.

cpto polecenie kopiowania za pomocą terminala, -rpowoduje, że rekurencyjnie (tak więc bieżący katalog + dalsze katalogi w bieżącym) ~/folder1to folder źródłowy, ~/new_folder1to folder docelowy dla plików / folderów wewnątrz źródła.


5
nie przechwytuje ukrytych plików
Portablejim

1
Dziękuję Bruno! Pomogło mi to zrozumieć składnię, choć musiałem ją nieco zmienić (usuwając znak ~). Może dlatego, że folder docelowy był w / opt, który znajduje się w innym systemie plików. I dziękuję Portablejim za zapamiętanie ukrytego pliku!
pandisvezia,

4
Okres końcowy jest ważny. Bez niego czasami może utworzyć nowy podkatalog ~/new_folder1/folder1zamiast kopiować zawartość.
wisbucky,

1
Dlaczego niecp -r ~/folder1/* ~/new_folder1
Alex78191,

@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
Bruno Pereira

14

Sprawdź ten http://www.cyberciti.biz/faq/copy-folder-linux-command-line/, aby uzyskać więcej informacji na temat kopiowania folderu. Mam nadzieję że to pomoże.

cp Command

cpto komenda Linux do kopiowania plików i katalogów. Składnia jest następująca:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

W tym przykładzie skopiuj /home/vivek/lettersfolder i wszystkie jego pliki do /usb/backupkatalogu:

cp -avr /home/vivek/letters /usb/backup

Gdzie,

-a : Zachowaj określone atrybuty, takie jak katalog tryb pliku, własność, znaczniki czasu, jeśli to możliwe, dodatkowe atrybuty: kontekst, łącza, xattr, wszystkie.

-v : Wyjaśnij, co się dzieje.

-r: Kopiuj katalogi rekurencyjnie. Przykład

Skopiuj folder o nazwie / tmp / conf do / tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup

3
Nie o to pyta pytanie.
AStopher

(Używanie -r z -a jest zbędne; na gnu cp -a jest takie samo jak „-dr --preserve = all”)
cristoper

1
cp: opcje -R i -r nie mogą być określone razem.
IgorGanapolsky,

4

Prosty przykład.

Skopiuj katalog dir_1 i jego zawartość (_files_) do katalogu dir_2 :

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

Skopiuj tylko zawartość (_plików_) katalogu_1 do katalogu katalog_2 :

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ jest symbolem zastępczym dla rzeczywistych plików znajdujących się w katalogu.


2

Jeśli są dwa foldery: (z uprawnieniem do zapisu)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

Jeśli znajdujesz się w folderze PORTAL, w którym chcesz skopiować całą zawartość innego folderu, powiedz DANE na tym samym poziomie, to zrobisz

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

Musisz zauważyć 2 kropki. Ostatnia kropka mówi skopiuj tutaj w obecnym folderze

i

jeden następujący / DATA /. mówi, że wszystkie ZAWARTOŚCI w folderze DANYCH do skopiowania, a nie sam folder DANYCH.

Jeśli usuniesz to końcowe „”. z / DATA /

wtedy cały folder DANYCH zostanie skopiowany do PORTALU (z którego kopiujesz).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.