Làm cách nào tôi có thể sao chép nội dung của một thư mục sang thư mục khác trong một thư mục khác bằng thiết bị đầu cuối?


740

Tôi đang cố gắng sao chép nội dung của một thư mục sang một thư mục khác trong một thư mục khác bằng thiết bị đầu cuối.

Ai đó có thể cung cấp cho tôi một ví dụ về cú pháp dòng lệnh cần thiết để đạt được điều này không?

Câu trả lời:


1116

Bạn có thể sao chép nội dung của một thư mục /sourcesang một thư mục hiện có khác /destbằng lệnh

cp -a /source/. /dest/

Các -atùy chọn là một lựa chọn đệ quy được cải thiện, mà giữ gìn tất cả các thuộc tính tập tin, và cũng có thể duy trì liên kết tượng trưng.

Các .ở cuối đường dẫn nguồn là một cụ thể cpcú pháp cho phép để sao chép tất cả các file và thư mục, bao gồm những ẩn.


@enzotib Tôi đang cố gắng sử dụng lệnh này để sao chép nội dung của "Tải xuống / văn bản" thành "~ / .config / inkscape / extend /." Sử dụng lệnh của bạn, tôi gõ "cp -a / Tải xuống / textext /. /~/.config/inkscape/extensions/." nhưng điều này không hoạt động
Funzies

@Funzies: có lẽ lệnh của bạn phải là:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib

Thêm -pcờ như để bảo vệ các quyền và dấu thời gian của tệp. cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade

3
@DylanValade: -ađã ngụ ý --preserve=all, nó rộng hơn -p = --preserve=mode,ownership,timestamps.
enzotib

1
@BennyNeugebauer: scpđược sử dụng để sao chép qua mạng (thông qua ssh) và chỉ mã hóa kênh liên lạc, không phải các tệp trên hệ thống tệp đích.
enzotib

129

Một thay thế là rsync

rsync -r source/ destination

Ưu điểm của rsync là:

  1. Sau khi đồng bộ hóa ban đầu, nó sẽ chỉ sao chép các tệp đã thay đổi.

  2. Bạn có thể sử dụng nó qua mạng, thuận tiện cho các tệp trong $ HOME, đặc biệt là các tệp cấu hình.


5
Tôi nghĩ bạn không cần dấu hoa thị. rsync -r source/ destinationCó nên đủ không?
Joschua

1
Cái này thích hợp hơn: 'rsync -rtvp source / * Destination'
shridutt kothari

-r không hoạt động đối với các tệp / thư mục ẩn
Nam G VU

1
Điều này sẽ không sao chép các tệp bị ẩn, vì bash mở rộng * chỉ thành tệp không bị ẩn. Giải pháp của @Joschua an toàn hơn.
sauerburger

rsync sẽ sao chép toàn bộ thư mục, bao gồm các tệp ẩn, nếu bạn sử dụng dấu / không có dấu * nên rync source/ destrõ ràng mọi người sẽ cần tùy chỉnh lệnh rsync để hoạt động như họ muốn.
Panther

78

Cho phép nói rằng bạn có một thư mục có tên folder1 tại của bạn ~, bên trong folder1 là 1 tập tin có tên file1 và 2 thư mục gọi là Sub1sub2 mỗi với các tập tin và thư mục khác bên trong chúng.

Để sao chép tất cả các nội dung của ~/folder1để ~/new_folder1bạn sẽ sử dụng

cp -r ~/folder1/. ~/new_folder1

new_folder1sau đó sẽ chứa tất cả các tập tin và thư mục từ folder1.

cplà lệnh sao chép bằng thiết bị đầu cuối, -rlàm cho nó đệ quy (vì vậy, thư mục hiện tại + thư mục tiếp theo bên trong hiện tại) ~/folder1là thư mục gốc, ~/new_folder1là thư mục đích cho các tệp / thư mục bên trong gốc.


5
nó không bắt được các tập tin ẩn
Portablejim

1
Cảm ơn bạn Bruno! Nó giúp tôi hiểu cú pháp, mặc dù tôi phải thay đổi nó một chút (xóa dấu ~). Có thể vì thư mục đích nằm trong / opt, nằm trong một hệ thống tệp khác. Và cảm ơn bạn Portablejim để nhớ điều tập tin ẩn!
pandisvezia

4
Thời gian kéo dài là quan trọng. Không có nó, đôi khi nó có thể tạo một thư mục con mới ~/new_folder1/folder1thay vì sao chép nội dung trên.
wvducky

1
Tại sao khôngcp -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

Kiểm tra http://www.cyberciti.biz/faq/copy-folder-linux-command-line/ để biết thêm thông tin về sao chép thư mục. Hi vọng điêu nay co ich.

cp Command

cplà một lệnh Linux để sao chép các tập tin và thư mục. Cú pháp như sau:

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

Trong ví dụ này sao chép /home/vivek/lettersthư mục và tất cả các tệp của nó vào /usb/backupthư mục:

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

Ở đâu,

-a : Giữ nguyên các thuộc tính được chỉ định như thư mục một chế độ tệp, quyền sở hữu, dấu thời gian, nếu có thể các thuộc tính bổ sung: bối cảnh, liên kết, xattr, tất cả.

-v : Giải thích những gì đang được thực hiện.

-r: Sao chép thư mục đệ quy. Thí dụ

Sao chép thư mục có tên / tmp / conf vào / tmp / backup:

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

3
Đây không phải là những gì câu hỏi yêu cầu.
AStopher 8/03/2015

(Sử dụng -r với -a là không cần thiết; trên gnu cp -a giống như "-dr --preserve = all")
cristoper

1
cp: các tùy chọn -R và -r có thể không được chỉ định cùng nhau.
IgorGanapolsky

4

Ví dụ đơn giản.

Sao chép thư mục dir_1 và nội dung của nó (_files_) vào thư mục dir_2 :

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

Chỉ sao chép nội dung (_files_) của dir_1 vào thư mục dir_2 :

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

_files_ là một giữ chỗ cho các tập tin thực tế nằm trong thư mục.


2

Nếu có hai thư mục: (có quyền ghi)

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

Nếu bạn ở trong thư mục có tên PORTAL nơi bạn muốn sao chép tất cả nội dung của thư mục khác, hãy nói DATA ở cùng cấp độ, bạn sẽ làm

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

Bạn phải chú ý 2 chấm. Dấu chấm cuối cùng cho biết bản sao ở đây trong thư mục hiện tại

một sau / DATA /. nói rằng tất cả NỘI DUNG bên trong thư mục DATA sẽ được sao chép chứ không phải chính thư mục DATA.

Nếu bạn xóa dấu vết này "." từ / DATA /

sau đó toàn bộ thư mục DATA sẽ được sao chép bên trong PORTAL (từ nơi bạn đang đối phó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.