Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将另一个进程正在FTP的SCP文件删除并在完成时将其删除?_Linux_File_Ftp_Scp - Fatal编程技术网

Linux 如何将另一个进程正在FTP的SCP文件删除并在完成时将其删除?

Linux 如何将另一个进程正在FTP的SCP文件删除并在完成时将其删除?,linux,file,ftp,scp,Linux,File,Ftp,Scp,文件正在通过FTP协议传输到我机器上的一个目录。我需要将这些文件SCP到另一台机器上,并在完成时删除它们。 如何检测是否已通过FTP进行了文件传输&文件可以安全地执行SCP 没有可靠的方法来检测传输的完成情况。有些客户端在实际上载文件之前发送ALLO命令并传递文件大小,但这不是一个明确的规则,因此您不能依赖它。总而言之,客户机可能会流式传输数据,并且在其一侧没有明确的文件结尾 如果客户端在您的控制下,您可以让它上载扩展名为A的文件,并在上载后将文件重命名为扩展名B。然后您只传输扩展名为B的文件。

文件正在通过FTP协议传输到我机器上的一个目录。我需要将这些文件SCP到另一台机器上,并在完成时删除它们。
如何检测是否已通过FTP进行了文件传输&文件可以安全地执行SCP

没有可靠的方法来检测传输的完成情况。有些客户端在实际上载文件之前发送ALLO命令并传递文件大小,但这不是一个明确的规则,因此您不能依赖它。总而言之,客户机可能会流式传输数据,并且在其一侧没有明确的文件结尾


如果客户端在您的控制下,您可以让它上载扩展名为A的文件,并在上载后将文件重命名为扩展名B。然后您只传输扩展名为B的文件。

您可以执行如下脚本:

#!/bin/bash

EXPECTED_ARGS=1
E_BADARGS=65

#Arguments control
if [ $# -lt $EXPECTED_ARGS ]
then
  echo "Usage: `basename $0` <folder_update_1> <folder_update_2> <folder_update_3> ..."
  exit $E_BADARGS
fi

folders=( "$@" )
for folder in ${folders[@]} 
do
    #Send folder or file to new machine 
    time rsync --update -avrt -e ssh /local/path/of/$folder/ user@192.168.0.10:/remote/path/of/$folder/

    #Delete local file or folder
    rm -r /local/path/of/$folder/
done
Rsync与scp类似。我更喜欢使用rsync,但您可以更改它

    time rsync --update -avrt -e ssh /local/path/of/$file user@192.168.0.10:/remote/path/of/$file
    rm /local/path/of/$file/