Có các lệnh khác như scp nhưng để xóa các tập tin và thư mục?


13

Tôi đang sử dụng scp để sao chép công cụ đến một địa điểm từ xa. Nhưng đôi khi scp không hoạt động như mong đợi, tôi đã thấy rằng đôi khi bản sao không hoàn thành đúng cách (có thể khi tôi đã thêm các tệp mới vào thư mục tôi đang sao chép).

Vì vậy, tôi muốn xóa thư mục từ xa trước và sau đó thực hiện sao chép để đảm bảo rằng tôi có chính xác những gì tôi cần.

Có các lệnh khác như scp (ví dụ srm hoặc smv) không? Hoặc có cách nào để loại bỏ các thư mục và tập tin từ xa?

Câu trả lời:


19

Các sshlệnh sẽ cho phép bạn thực hiện khá nhiều bất kỳ lệnh trên máy chủ từ xa, ví dụ như,

ssh yourlogin@remotehost rmdir somedir

trong ví dụ somedirnày có liên quan đến thư mục chính của yourlogin.


Cảm ơn vì điều đó. Vấn đề duy nhất tôi gặp phải với phương pháp là mỗi lần bạn gọi nó, bạn phải "đăng nhập" lại :(. Vì mục tiêu của tôi được nhúng nên tôi không thể sử dụng các khóa ssh vì tất cả đều bị ghi đè, vì vậy tôi đang cố gắng làm điều này trong một lệnh. rsync có vẻ đầy hứa hẹn. Nhưng, +1 vì điều này không trả lời câu hỏi :))
code_fodder

5
@code_fodder bạn cũng sẽ phải đăng nhập bằng rsync. Trong thực tế, bạn sẽ phải đăng nhập lại với tất cả các phương thức. Trong thực tế, với ssh, bạn ít nhất có thể thực thi nhiều lệnh trong một lần : ssh you@host bash -c "command1;command2;command3; commandN".
terdon

@terdon Đây là một điểm tốt và hoạt động tốt, cảm ơn :)
code_fodder

4

Rsync sẽ sao chép toàn bộ đường dẫn / cây và kiểm tra các tệp đã có ở đích và không bận tâm sao chép chúng nếu chúng không thay đổi. Nếu bạn sử dụng tùy chọn --delete, nó sẽ xóa bất kỳ tệp nào ở đích không còn ở nguồn. Nó hoạt động trên ssh


Tôi đã loay hoay với rsync, vì ai đó đã đề cập đến điều này trong một bài đăng khác của tôi về scp. Tôi đã cài đặt rsync trên máy tính cục bộ của mình nhưng không phải trên máy tính từ xa (một đơn vị nhúng). Tôi đã sử dụng lệnh rsync -avz -e shh root@location:/path/to/dest /path/from/hostNhưng nó thất bại sau khi tôi nhập mật khẩu nói sh: rsync: not found. Điều đó có nghĩa là rsync phải tồn tại trên máy tính từ xa? Cảm ơn!
code_fodder

1
@code_fodder vâng, nó cần một chương trình chạy trên hệ thống từ xa để cho nó biết phải làm gì. Đây không phải là một chương trình sao chép thẳng
Canada Luke

@CanadianLuke ... chết tiệt :(
code_fodder

@code_fodder chỉ cần cài đặt nó! Hữu ích hơn thì không
Canada Luke

Tùy thuộc vào giải pháp nhúng, rsync có thể có hoặc không có sẵn với bất kỳ mức độ dễ dàng nào ... mặc dù đó là một lỗi không phổ biến như tôi đã nói, tùy thuộc vào giải pháp nhúng. Lưu ý: Rupync không phải chạy mọi lúc, nhưng nó cần phải có mặt để được chạy theo yêu cầu.
jerm

3

Nếu máy chủ SSH từ xa của bạn hỗ trợ hệ thống con SFTP (hầu hết, trừ khi nó bị vô hiệu hóa rõ ràng), bạn có thể sử dụng sftpshell (hoặc bất kỳ máy khách SFTP nào khác ) để thao tác các tệp và thư mục trên máy chủ từ xa.

Thật không may, một điều mà sftpshell cơ bản rõ ràng không xử lý là loại bỏ thư mục đệ quy; để xóa một thư mục, trước tiên bạn phải xóa tất cả nội dung của nó. Hầu hết các khách hàng khác (đặc biệt là các đồ họa) thường hỗ trợ nó.

(Bạn không đề cập đến hệ điều hành cục bộ của mình là gì, nhưng nếu là Linux, bạn có thể sử dụng trình quản lý tệp gốc của mình làm máy khách GUI SFTP bằng cách trỏ nó vào một URL như sftp: // user @ host / path /. Đối với Windows, WinSCP là một khách hàng tốt và FileZilla là một giải pháp đa nền tảng tốt.)


1

Để làm trống thư mục từ xa (/ cục bộ), hãy sử dụng rsync như thế này:

rsync -r --delete-excluded --exclude=* / server:/tmp/empty_this_dir/

Hãy cẩn thận - nó sẽ xóa mọi thứ bên dưới đích đã chỉ định!


Tôi đã thử điều này, nhưng nó trả về một lỗi và không xóa thư mục từ xa. yêu cầu thực thi không thành công trên kênh 0 rsync: kết nối bị đóng đột ngột (0 byte nhận được cho đến nay) [người gửi] lỗi rsync: lỗi không giải thích được (mã 255) tại io.c (235) [sender = 3.1.2]
xarlymg89

Có vẻ như có vấn đề khi bắt đầu rsync ở phía xa hoặc thậm chí kết nối qua ssh. Bạn có thể thử ssh server rsync --versionhoặc ssh -v server rsync --versiontìm lý do.
bro

Cảm ơn bạn đã trả lời, tuy nhiên tôi đã tìm ra cách giải quyết vấn đề, không thanh lịch nhưng có kết quả tương tự. Sẽ thử lại vì tôi tin rằng tôi sẽ phải đối mặt với nó một lần nữa.
xarlymg89

0

Cách khác, gắn thư mục từ xa vào một thư mục cục bộ, sau đó loại bỏ nó rm -r /path_to_directory_to_removevà cuối cùng bỏ qua thư mục thực hiện thủ thuật.

Câu trả lời gốc tại đây: /programming//a/24650511/973919

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.