2012-06-28 21 views
19

Trên Linux, tôi có một lựa chọn --parents sẵn sàng cho lệnh cp để tôi có thể làmcp --parents tùy chọn trên mac

cp --parents test/withintest/go.rb test2 

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html

Trên Mac, tôi không có tùy chọn này có sẵn. Có cách nào để làm điều này trên máy Mac? Tại sao tùy chọn này không có sẵn?

PS. Mục đích của --parents là như sau:

‘--parents’ Tạo tên của mỗi tệp đích bằng cách nối thêm thư mục đích và tên được chỉ định của tệp nguồn.

Đối số cuối cùng được đưa ra cho cp phải là tên của thư mục hiện có .

Ví dụ, lệnh:

 cp --parents a/b/c existing_dir 

sao chép tập tin a/b/c để existing_dir/a/b/c, tạo ra bất kỳ thư mục trung gian mất tích.

Trả lời

17

Bạn có thể sử dụng lệnh ditto trên Mac OS X:

Các hình thức cơ bản

ditto <src-path> <dst-path> 

làm những gì bạn muốn. Có nhiều lựa chọn hơn nữa - hãy xem man page.

+0

Perfect. 'ditto some/dir/structure/file/tmp/some/dir/structure/file' tạo các thư mục một số/dir/structure dưới/tmp, như mong muốn. – ca2longoria

+5

Tôi không thấy cách này trả lời câu hỏi gốc. 'cp --parents a/b/c existing_dir' và' ditto a/b/c existing_dir' dường như làm những việc khác nhau. – Alec

+1

@alecb Tôi nghĩ câu trả lời đã giải quyết những gì OP thực sự muốn đạt được, chứ không phải là phương pháp chính xác. Tôi đã trải qua quá trình suy nghĩ tương tự khi tôi phát hiện ra lệnh 'ditto'. – Echelon

32

Điều này làm phiền tôi khá nhiều. Giải pháp cho việc này có thể là sử dụng rsync.

rsync -R test/withintest/go.rb test2 

có tác dụng tương tự như cp --parents và OS X có tiêu chuẩn với rsync.

2

Bạn có thể cài đặt phiên bản GNU cp bằng cách sử dụng MacPorts.

Sau MacPorts được cài đặt bạn có thể cài đặt coreutils gói:

sudo port install coreutils 

Sau đó, bạn sẽ có thể sử dụng phiên bản GNU cp và utilitites lõi khác (ls, date, cat, vv) bằng cách đặt trước các lệnh với một số g:

gcp --parents test/withintest/go.rb test2 

Nếu bạn muốn sử dụng các phiên bản GNU này theo mặc định, bạn có thể thêm bin GNU cập nhật đường dẫn của bạn. Thêm thông tin sau vào số ~/.bash_profile:

export PATH="/opt/local/libexec/gnubin:$PATH" 
0

Tôi sẽ không thay thế mac cp bằng GNU cp. Tôi cũng sẽ không sử dụng ditto vì nó không phải là đa nền tảng.Thay vì sử dụng các công cụ đa nền tảng, chẳng hạn như rsync:

rsync <srcDir/srcFile> <dst> 

Kết quả: dst/srcDir/srcFile

Các vấn đề liên quan