Làm cách nào để sao chép thư mục có tệp vào thư mục khác trong Unix / Linux? [đóng cửa]


1192

Tôi gặp một số vấn đề để sao chép một thư mục có tệp trong thư mục đó sang thư mục khác. Lệnh cp -rkhông sao chép các tập tin trong thư mục.




Tôi ước điều này có thể được chuyển sang SE nơi nó có nhiều chủ đề hơn.
jrh

6
Lập trình Bash là về chủ đề .
xskxzr

Câu trả lời:


1980

Tùy chọn bạn đang tìm kiếm là -R.

cp -R path_to_source path_to_destination/
  • Nếu destinationkhông tồn tại, nó sẽ được tạo.
  • -Rcó nghĩa là copy directories recursively. Bạn cũng có thể sử dụng -rvì nó không phân biệt chữ hoa chữ thường.
  • Lưu ý các sắc thái với việc thêm dấu vết theo nhận xét/ của mỗi @ muni764 .

5
Tôi tự hỏi tại sao lệnh chính xác này trong dockerfile sao chép tất cả các tệp thư mục nguồn vào đích, thay vì chỉ sao chép toàn bộ thư mục.
thánh

4
Tôi tin rằng '/' ở cuối tạo nên sự khác biệt và điều đó có thể giải thích cho trải nghiệm của bạn. Nếu nguồn bao gồm dấu gạch chéo, nó sẽ chỉ sao chép những gì có trong thư mục. Nếu nó không bao gồm dấu gạch chéo, nó cũng sẽ sao chép thư mục và sau đó là nội dung bên trong nó. Bộ nhớ của tôi là hành vi này thay đổi theo lệnh và có thể sự kiện bởi hệ điều hành một chút. Đây là một tài liệu tham khảo với nhiều thông tin hơn.
OllieBrown

23
Tôi sẽ nói nếu bạn không muốn bao gồm nguồn và bạn muốn đảm bảo mọi thứ được sao chép (symlink, tệp ẩn) mà không sao chép thư mục gốc nguồn là sử dụng -ra source /. Nơi Đến. Điều này sẽ đảm bảo nội dung của thư mục được sao chép, nhưng không phải chính thư mục mẹ, đôi khi rất tiện dụng. Và sự khác biệt là /.
muni764

Điều này dường như cũng hoạt động chính xác nếu các thư mục được sao chép là các liên kết tượng trưng, ​​đó là trường hợp sử dụng của tôi.
Gdalya

3
Lưu ý tầm quan trọng của "Dấu gạch chéo" trên nguồn của bạn trong cp -r src/. destTôi biết nó được đề cập nhưng dường như tôi vẫn nhớ nó mỗi lần.
bbeecher

368

Bạn đang tìm kiếm cplệnh. Bạn cần thay đổi thư mục để bạn ở ngoài thư mục bạn đang cố sao chép.

Nếu thư mục bạn đang sao chép được gọi dir1và bạn muốn sao chép nó vào /home/Picturesthư mục của bạn :

cp -r dir1/ ~/Pictures/

Linux phân biệt chữ hoa chữ thường và cũng cần /sau mỗi thư mục để biết rằng nó không phải là một tệp. ~là một ký tự đặc biệt trong thiết bị đầu cuối tự động đánh giá vào thư mục chính của người dùng hiện tại. Nếu bạn cần biết bạn đang ở thư mục nào, hãy sử dụng lệnh pwd.

Khi bạn không biết cách sử dụng lệnh Linux, có một trang hướng dẫn mà bạn có thể tham khảo bằng cách nhập:

man [insert command here]

tại một dấu nhắc thiết bị đầu cuối.

Ngoài ra, để tự động hoàn thành các đường dẫn tệp dài khi nhập vào thiết bị đầu cuối, bạn có thể nhấn Tabsau khi bạn bắt đầu nhập đường dẫn và bạn sẽ được cung cấp các lựa chọn hoặc nó sẽ chèn phần còn lại của đường dẫn.


6
Để làm rõ hơn, -rtùy chọn trong này sẽ sao chép các thư mục đệ quy.
TVann

5
Có phải OP không xác định rằng anh ta đang sử dụng cp -rlệnh, nhưng nó không hoạt động đúng?
MD XF

4
Lý do tôi đưa vào thông tin về các trang này là những cờ này có thể phụ thuộc vào phân phối. Tuy nhiên, đối với hầu hết các phần, nó xuất hiện -r, --recursive-Rlà tương đương. Nó cũng sẽ đưa ra những cạm bẫy phổ biến, vv là tốt đẹp.
Alex W

6
Nếu bạn muốn sao chép một cách hợp lý TRỰC TIẾP và không chỉ nội dung của nó, hãy bỏ dấu gạch ngang trong thư mục nguồn tức là. cp -r dir1 ~/Pictures/
mehtunguh

105

Sử dụng:

$ cp -R SRCFOLDER DESTFOLDER/

4
đây là cách tôi đã thực hiện và demo1_copychưa tồn tại$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
HattrickNZ
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.