Solusi 1:
rsync over ssh mungkin pilihan terbaik Anda dengan --remove-source-files
opsi
rsync -avz --remove-source-files -e ssh /this/dir [email protected]:/remote/dir
tes cepat memberi;
[[email protected] ~]$ mkdir test1
[[email protected] ~]$ mkdir test2
[[email protected] ~]$ touch test1/testfile.1
[[email protected] ~]$ ls test1/
testfile.1
[[email protected] ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 [email protected]:/home/tomh/test2/
sending incremental file list
sent 58 bytes received 12 bytes 10.77 bytes/sec
total size is 0 speedup is 0.00
[[email protected] ~]$ ls test1/
[[email protected] ~]$
[[email protected] ~]$ ls test2/
testfile.1
Seperti yang disebutkan @SvenW, -e ssh
adalah default sehingga dapat dihilangkan.
Solusi 2:
Gunakan rsync
bukannya scp
:
rsync -avz --remove-source-files /sourcedir [email protected]:/targetdir
Info selengkapnya dengan man rsync
.
Solusi 3:
Pertanyaan ini telah dijawab dengan baik, dan jawabannya diterima, tetapi karena itu muncul di bagian atas halaman depan, saya pikir setidaknya saya akan mencoba menjawabnya dengan lebih tepat, jika kurang elegan. Ya, Anda dapat menggunakan kode pengembalian dari scp
, dan saya sering melakukannya. Di bash
:
scp foo [email protected]:/destination && rm foo
Saya mengambil poin Anda tentang banyak file untuk disalin dan menangani kegagalan di tumpukan dengan benar, jadi untuk banyak file:
for file in bar*; do scp "$file" [email protected]:/destination && rm "$file" ; done
Yang terakhir ini hanya praktis jika Anda menggunakan ssh-agent
, tapi saya sangat berharap demikian.
Solusi 4:
dalam situasi saya, port ssh bukan 22, jadi
rsync -avz --remove-source-files -e "ssh -p $portNumber" [email protected]:/path/to/files/ /local/path/
bekerja untuk saya.
Solusi 5:
jika Anda memiliki server target yang lebih lama seperti saya, Anda tidak dapat menggunakan
--remove-source-files
tetapi Anda harus menggunakan
--remove-sent-files --protocol=29
sebagai gantinya.