Làm thế nào để sao chép đường dẫn bảo quản tập tin trong Linux?


88

Tôi có các dự án Eclipse và tệp ".project" trong đó, cấu trúc thư mục trông giống như ' myProject/.project'. Tôi muốn sao chép các tệp '.project' này sang thư mục khác, nhưng tôi muốn tên thư mục kèm theo được giữ nguyên.

Giả sử tôi có ' a/myProject/.project', tôi muốn sao chép ' myProject/.project' thành ' b', vì vậy nó là ' b/myProject/.project', nhưng ' b/myProject' không tồn tại. Khi tôi thử trong:

 cp -r ./myProject/.project ../b

nó chỉ sao chép tệp '.project' mà không có thư mục 'myProject'. Xin tư vấn.

Câu trả lời:


153

Công tắc bạn cần là --parents, vd:

jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo


7

Sử dụng tarvới một cái gì đó như:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(Không được kiểm tra. Trước tiên hãy chạy khô hoặc thử trong kịch bản mô phỏng.)


hoạt động tốt đáng ngạc nhiên! Trên mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP là tệp văn bản với danh sách các đường dẫn đến tệp sẽ được sao chép
alexey

4

Đầu tiên sử dụng mkdir -pđể tạo thư mục đích với việc tạo đường dẫn cha đệ quy. Sau đó sao chép nội dung vào thư mục đích:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

3
cp -P a/myProject/.project b

Xem man cpđể biết thêm thông tin.


Điều này dường như không có ích. Nó chỉ sao chép '.project' vào b, nhưng nó không sao chép 'myProject'.
dhblah

3

Tôi sử dụng cpio kết hợp với tìm. Giải thích tại đây .

Ví dụ cho trường hợp sử dụng của bạn:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

Lệnh này tìm tất cả các tệp trong /a/myProject/.project/và bản sao, trong khi bảo toàn đường dẫn, bất kỳ tệp nào có trong đó.


1
.project là một tập tin, không phải dir!
ddbug

1

Ngoài ra, --parentsnó cũng được yêu cầu thêm -rtùy chọn để tránh bỏ sót bản sao của hầu hết các thư mục bên trong

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

Vì vậy, lệnh làm việc cho tôi là

$ cp --parents -r test/1/.moo test2/

0

Xin lưu ý rằng dường như có một lỗi trong cp --parents. Khi tôi sử dụng --parentscùng với --preserve=all, các thuộc tính ngày và thời gian của MỘT SỐ thư mục đích KHÔNG được giữ nguyên.

Liên kết sau đây dường như xác nhận rằng đây là một lỗi: bug # 8767: cp: --preserve = tất cả không hoạt động cho cha mẹ khi --parent được sử dụng .

Vì vậy, có vẻ như bạn không thể dựa vào các thuộc tính được bảo tồn khi sử dụng --parentscùng với --preserve=allhoặc -p.


-3

Tôi đã sử dụng --parentsvới cplệnh và làm việc hoàn hảo với tôi. để biết thêm chi tiết luôn luôn sử dụng hướng dẫn. Cảm ơn bạn.


3
Không thêm bất cứ điều gì vào 5 câu trả lời khác.
Deer Hunter

Người trả lời xin lưu ý rằng .project trong Eclipse là một tệp chứ không phải thư mục. Vì vậy, ví dụ mkdir -pa / .project không có ý nghĩa.
ddbug
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.