Bash FTP 上传 - 要记录的事件
Bash FTP upload - events to log
我有 bash 脚本 ftp 上传文件。在日志文件中,我有所有事件。我怎样才能在日志文件中只包含几个事件,例如:“连接到 $HOST”或“警告 - ftp 连接失败”; “确定发送数据”; “转移完成”; “在 0.00 秒内发送了 10000 个字节 (73.9282 MB/s)”。
#!/bin/sh
echo "####################" >> $TESTLOG
echo "$(date +%Y%m%d_%H%M%S)" >> $TESTLOG
ftp -i -n -v <<SCRIPT >> ${TESTLOG} 2>&1
open $HOST
user $USER $PASSWD
bin
cd $DPATH
lcd $TFILE
mput *.txt
quit
SCRIPT
exit 0
####################
20210304_111125
Connected to $HOST.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
Local directory now /home/pi/Data/data_files/tmp
local: 20210304_111125_ftp_10k.txt remote: 20210304_111125_ftp_10k.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
10000 bytes sent in 0.00 secs (73.9282 MB/s)
221 Goodbye.
首先,我想说虽然这是一个很常见的习语,但它没有错误检查,我很鄙视它。
既然我把它说出来了...
ftp 2>&1 -inv << SCRIPT | grep -f patfile >> ${TESTLOG}
patfile
是要保留的模式列表。 c.f。 grep
手册页。
...继续我的咆哮...
如果有人更改了您的 $DPATH 权限怎么办? cd
失败; ftp
向控制台报告失败(您的 grep
忽略它,所以它甚至没有被记录...),脚本继续并将文件放在错误的位置。全盘阻止文件放置?同一个循环。上千件事可能会出错,但 ftp
只是愉快地继续下去,甚至 return 对大多数人来说退出时都不会出现错误。 不要这样做。
只需使用scp
。是的,您必须设置诸如 ssh 密钥之类的东西,但是命令很简单且可检查。
scp $TFILE/*.txt $HOST:$DPATH/ || echo "copy failed"
更详尽的回复-
if scp $TFILE/*.txt $HOST:$DPATH/ # test the scp
then ls -ltr $HOST:$DPATH/*.txt # show result if success
else echo "copy failed" # code here for if it fails...
exit 1 # as much code as you feel you need
fi
否则,使用带有 ftp 模块的不同语言,例如 Perl,这样您就可以检查步骤并处理故障。
(我写了一个处理 ftp 协进程的 ksh 脚本,一次给它一个命令,检查结果...它是可行的,但我不推荐它。)
我有 bash 脚本 ftp 上传文件。在日志文件中,我有所有事件。我怎样才能在日志文件中只包含几个事件,例如:“连接到 $HOST”或“警告 - ftp 连接失败”; “确定发送数据”; “转移完成”; “在 0.00 秒内发送了 10000 个字节 (73.9282 MB/s)”。
#!/bin/sh
echo "####################" >> $TESTLOG
echo "$(date +%Y%m%d_%H%M%S)" >> $TESTLOG
ftp -i -n -v <<SCRIPT >> ${TESTLOG} 2>&1
open $HOST
user $USER $PASSWD
bin
cd $DPATH
lcd $TFILE
mput *.txt
quit
SCRIPT
exit 0
####################
20210304_111125
Connected to $HOST.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
Local directory now /home/pi/Data/data_files/tmp
local: 20210304_111125_ftp_10k.txt remote: 20210304_111125_ftp_10k.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
10000 bytes sent in 0.00 secs (73.9282 MB/s)
221 Goodbye.
首先,我想说虽然这是一个很常见的习语,但它没有错误检查,我很鄙视它。
既然我把它说出来了...
ftp 2>&1 -inv << SCRIPT | grep -f patfile >> ${TESTLOG}
patfile
是要保留的模式列表。 c.f。 grep
手册页。
...继续我的咆哮...
如果有人更改了您的 $DPATH 权限怎么办? cd
失败; ftp
向控制台报告失败(您的 grep
忽略它,所以它甚至没有被记录...),脚本继续并将文件放在错误的位置。全盘阻止文件放置?同一个循环。上千件事可能会出错,但 ftp
只是愉快地继续下去,甚至 return 对大多数人来说退出时都不会出现错误。 不要这样做。
只需使用scp
。是的,您必须设置诸如 ssh 密钥之类的东西,但是命令很简单且可检查。
scp $TFILE/*.txt $HOST:$DPATH/ || echo "copy failed"
更详尽的回复-
if scp $TFILE/*.txt $HOST:$DPATH/ # test the scp
then ls -ltr $HOST:$DPATH/*.txt # show result if success
else echo "copy failed" # code here for if it fails...
exit 1 # as much code as you feel you need
fi
否则,使用带有 ftp 模块的不同语言,例如 Perl,这样您就可以检查步骤并处理故障。
(我写了一个处理 ftp 协进程的 ksh 脚本,一次给它一个命令,检查结果...它是可行的,但我不推荐它。)