Khi tôi sử dụng
cp -R inputFolder outputFolder
kết quả phụ thuộc vào ngữ cảnh :
- nếu
outputFolder
khô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
outputFolder
tồ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ẽ outputFolder
tạ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 --parents
như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ôngoutputFolder
nhưngsome/path/outputFolder
) --remove-destination
hoặc--update
trong 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 outputFolder
không?
Cách UNIX di động, đồng ý để làm điều đó là gì?
rsync
?
cp
, đường ống giữa hai tar
lệ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. -C
thay đổ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.
mv
di chuyển một tập hợp các tệp thành một tệp thông thường?