Làm thế nào để loại bỏ các thư mục từ nguồn sau khi sao chép chúng?


1

Tôi chỉ muốn di chuyển dirs. Tôi đã lần lượt nhìn vào mv, cp và rsync, vì mỗi công cụ lần lượt dường như không có tùy chọn xóa thư mục khỏi nguồn sau khi sao chép chúng. Chẳng hạn, mv cần tập tin, không phải dir, khi src và dst ở trên các thiết bị khác nhau:

"di chuyển giữa các thiết bị thất bại: src sang dst; không thể xóa mục tiêu: Là một thư mục"

Có lẽ cách đơn giản nhất để làm điều này là sử dụng một cmd xóa bổ sung, mặc dù tôi không muốn sử dụng nó, vì điều đó làm tăng nguy cơ mất dữ liệu.

Câu trả lời:


5

Như Bob đã nói. Thật không may, tôi không thể (chưa) nhận xét, vì vậy tôi phải đặt điều chỉnh của mình ở đây. Tôi khuyên bạn nên sử dụng phiên bản sửa đổi một chút của lệnh Bobs:

cp -rp source-dir target-dir && rm -r source-dir;

Bộ đôi và đảm bảo lệnh thứ hai chỉ được thực hiện nếu lệnh đầu tiên kết thúc thành công - sẽ là một nỗi kinh hoàng nếu bản sao thất bại vì một số lý do (ví dụ: không đủ dung lượng trên âm lượng đích) và tuy nhiên nguồn sẽ bị xóa ...


Nắm bắt tốt! Tôi chưa bao giờ thấy cấu trúc đó trước đây; học điều mới mỗi ngày.
BellevueBob

Vì vậy, tôi cung cấp cho bạn thêm một gợi ý hữu ích được kết nối với gợi ý này: trong khi & amp; & amp; có nghĩa là "VÀ (nếu thành công)", cũng có ống đôi | | có nghĩa là "HOẶC (nếu thất bại)" ​​- khá hữu ích trong các tập lệnh, ví dụ: khi bạn cần gắn kết mục tiêu trước, sau đó sao chép mọi thứ, làm việc khác, v.v.; nếu mount không thành công, tập lệnh còn lại không có ý nghĩa - vì vậy bạn có thể sử dụng cấu trúc như mount /path/to/target || { echo "Mount failed, aborting!"; exit 1 }
Izzy

Hoạt động vào cuối của tôi. Nhân tiện, -rp làm gì?
Syaiful Nizam Yahya

@publicENEMY làm việc thuộc tính đệ quy và Presevering (quyền sở hữu, quyền, v.v.). Xem man cp :)
Izzy

1

Thực ra, mv có thể "di chuyển" thư mục; nhưng nó không thể di chuyển trên các thiết bị hoặc hệ thống tập tin. Nó chạy rất nhanh vì tất cả những gì nó làm là xác định lại con trỏ tệp; các contecnts không được sao chép.

Vì vậy, bạn cần hai lệnh (sao chép sau đó loại bỏ). Trên hệ thống Solaris của tôi, tôi di chuyển các thư mục với hai lệnh sau:

cp -rp source-dir target-dir; rm -r source-dir;

Xem các trang hướng dẫn để đảm bảo bạn sử dụng cú pháp chính xác cho môi trường của bạn và để xử lý bất kỳ liên kết tượng trưng nào có thể tồn tại.


'mv' CÓ THỂ di chuyển trên các thiết bị và hệ thống tệp, nhưng nó thực hiện dưới dạng 'bản sao' theo sau là 'xóa'. Nó sẽ tìm ra phải làm gì.
lornix

Cấu trúc của bạn có một vấn đề nghiêm trọng: nó sẽ xóa bản gốc ngay cả khi bản sao thất bại - do đó có hiệu quả "giúp bạn thoát khỏi" dữ liệu. Chính xác những gì OP đề cập là "làm tăng nguy cơ mất dữ liệu".
Izzy
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.