Tôi đang chạy scp và sao chép một thư mục từ máy chủ từ xa, tôi đang chạy với -rl, vì vậy tôi thấy các tệp đang được sao chép, có thể bỏ qua tệp hiện tại theo cách nào đó không?
Tôi đang chạy scp và sao chép một thư mục từ máy chủ từ xa, tôi đang chạy với -rl, vì vậy tôi thấy các tệp đang được sao chép, có thể bỏ qua tệp hiện tại theo cách nào đó không?
Câu trả lời:
Không, bạn không thể. Nhưng bạn có thể dừng lại scp
và sử dụng rsync
thay thế. Nó sẽ chỉ sao chép những khác biệt còn lại từ bản sao một phần và bạn có thể loại trừ bất kỳ tệp hoặc thư mục nào bạn không muốn chuyển.
rsync -avP -e ssh --exclude=somefile --exclude=somedir ./localdir/ user@server:remotedir/
Không, không phải với -r
hoặc bất kỳ cú pháp nào khác thực hiện nhiều lần chuyển tệp trong một scp
lệnh.
Điều đó nói rằng, scp
cũng tuân theo mô hình UNIX: viết các chương trình cung cấp chức năng đơn giản, chính xác có thể được kết nối với nhau theo những cách thú vị. Điều này có nghĩa là có thể viết một vòng lặp thực hiện tương tác các lệnh riêng lẻ của lệnh, mỗi vòng cho mỗi tệp. Sau đó, bạn có thể thoát ra khỏi các lệnh riêng lẻ khi chúng đang được chạy. (Ctrl-C)
Mã cho điều này đang được để lại như một bài tập cho người đọc, nhưng cần phải nhấn mạnh vòng lặp này trong một vỏ tương tác. Thoát ra khỏi vỏ không tương tác sẽ chấm dứt toàn bộ công việc.
Có bạn có thể!
Hãy liệt kê các thư mục từ xa và sao chép từng tệp riêng biệt. Sau đó nhấn ctrl-c cho mỗi tệp mà bạn không muốn sao chép:
OLD_IFS="$IFS"
IFS=$'\n'
for file in `ssh user@host ls /remote/directory/`
do echo user@host:/remote/directory/$file /local/directory/
done;
IFS="$OLD_IFS"
OLD_IFS ở đây để xử lý các tệp có khoảng trắng trong đó.