Khi tôi sử dụng
cp -R inputFolder outputFolder
kết quả phụ thuộc vào ngữ cảnh :
- nếu
outputFolderkhông tồn tại, nó sẽ được tạo và đường dẫn thư mục nhân bản sẽ làoutputFolder. - nếu
outputFoldertồn tại, thì bản sao được tạo sẽ làoutputFolder/inputFolder
Điều này thật kinh khủng , vì tôi muốn tạo một số tập lệnh cài đặt và nếu người dùng chạy nó hai lần do nhầm lẫn, anh ta sẽ outputFoldertạo lần đầu tiên, sau đó vào lần chạy thứ hai, tất cả các thứ sẽ được tạo lại một lần nữa outputFolder/inputFolder.
- Tôi muốn luôn luôn là hành vi đầu tiên: tạo một bản sao bên cạnh bản gốc (như anh chị em).
- Tôi muốn sử dụng
cpđể có thể mang theo (ví dụ: MINGW khôngrsyncđược giao hàng) - Tôi đã kiểm tra
cp -R --parentsnhưng điều này sẽ tạo lại đường dẫn lên cây thư mục (vì vậy bản sao sẽ khôngoutputFoldernhưngsome/path/outputFolder) --remove-destinationhoặc--updatetrong trường hợp 2 không thay đổi bất cứ điều gì, mọi thứ vẫn được sao chép vàooutputFolder/inputFolder
Có cách nào để làm điều này mà không cần kiểm tra sự tồn tại của outputFolder(nếu thư mục không tồn tại sau đó ...) hoặc sử dụng rm -rf outputFolderkhông?
Cách UNIX di động, đồng ý để làm điều đó là gì?
rsync?
cp, đường ống giữa hai tarlệnh là một cách đáng tin cậy để sao chép cây.
rsyncđược giao.
tar -C input -cf - . | tar -C output -xf -hoạt động. -Cthay đổi thư mục làm việc, nhưng nó không phải là một tùy chọn tiêu chuẩn, vì vậy nếu không được hỗ trợ, bạn cần chạy hai tars trong các thư mục làm việc phù hợp để bắt đầu, ví dụ: ( cd input && tar -cf - . ) | ( cd output && tar -xf - )Tuy nhiên, nếu bạn đang xử lý Windows, tôi sẽ chỉ sử dụng câu trả lời của roaima.
mvdi chuyển một tập hợp các tệp thành một tệp thông thường?