解決策 1:
--remove-source-files では、ssh 経由の rsync がおそらく最善の策です。 オプション
rsync -avz --remove-source-files -e ssh /this/dir example@unixlinux.online:/remote/dir
簡単なテストで得られる;
[example@unixlinux.online ~]$ mkdir test1
[example@unixlinux.online ~]$ mkdir test2
[example@unixlinux.online ~]$ touch test1/testfile.1
[example@unixlinux.onlineorkstation001 ~]$ ls test1/
testfile.1
[example@unixlinux.online ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 example@unixlinux.online:/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
[example@unixlinux.online ~]$ ls test1/
[example@unixlinux.online ~]$
[example@unixlinux.online ~]$ ls test2/
testfile.1
@SvenW が述べたように、-e ssh はデフォルトなので省略可能です。
解決策 2:
rsync を使用 scp の代わりに :
rsync -avz --remove-source-files /sourcedir example@unixlinux.online:/targetdir
man rsync の詳細情報 .
解決策 3:
この質問には問題なく回答があり、回答は受け入れられましたが、フロント ページの上部に表示されているので、エレガントではないとしても、少なくともより正確に回答しようと思いました。はい、scp からの戻りコードを使用できます 、そして私はよくそれをします。 bash で :
scp foo example@unixlinux.online:/destination && rm foo
複数のファイルをコピーし、スタックの障害を正しく処理することについてのあなたの意見を参考にします。したがって、複数のファイルの場合:
for file in bar*; do scp "$file" example@unixlinux.online:/destination && rm "$file" ; done
この最後は ssh-agent を使用している場合にのみ実用的です 、しかし、私はあなたがそうであることを願っています.
解決策 4:
私の状況では、ssh ポートは 22 ではないので、
rsync -avz --remove-source-files -e "ssh -p $portNumber" example@unixlinux.online:/path/to/files/ /local/path/
解決策 5:
私のように古いターゲット サーバーを使用している場合は、使用できません
--remove-source-files
ただし、使用する必要があります
--remove-sent-files --protocol=29