我正在编写一个bash脚本,将文件从Linux服务器发送到远程Windows FTP服务器。
我想在尝试创建文件夹之前,使用FTP检查存储文件的文件夹是否存在。
请注意,我不能使用SSH或SCP,并且我不能在Linux服务器上安装新脚本。此外,出于性能问题,我希望仅使用一个FTP连接来检查和创建文件夹。
这是发送文件的函数:
这是发送文件的函数:
sendFile() {
ftp -n $FTP_HOST <<! >> ${LOCAL_LOG}
quote USER ${FTP_USER}
quote PASS ${FTP_PASS}
binary
$(ftp_mkdir_loop "$FTP_PATH")
put ${FILE_PATH} ${FTP_PATH}/${FILENAME}
bye
!
}
下面是 ftp_mkdir_loop
的代码:
ftp_mkdir_loop() {
local r
local a
r="$@"
while [[ "$r" != "$a" ]]; do
a=${r%%/*}
echo "mkdir $a"
echo "cd $a"
r=${r#*/}
done
}
< p > ftp_mkdir_loop
函数有助于在$FTP_PATH
中创建所有文件夹(由于无法通过FTP执行mkdir -p $FTP_PATH
)。
总体而言,我的脚本可以工作,但不是“干净”的; 在脚本执行后,这是我在日志文件中得到的内容(是的,$FTP_PATH
由5个现有目录组成):
(directory-name) Cannot create a file when that file already exists.
Cannot create a file when that file already exists.
Cannot create a file when that file already exists.
Cannot create a file when that file already exists.
Cannot create a file when that file already exists.
cd
,然后执行每个不存在的组件一个连接来使用mkdir
,最后再执行一个连接来传输文件吗? - Etan Reisner$PIPESTATUS
来检查 FTP 中的错误是一个创意性的答案。但是根据 @EtanReisner 的评论,似乎会有太多的 FTP 连接。此外,我最终想要通过一个 FTP 连接来检查文件夹的存在并创建它们。 - grim$PIPESTATUS
,而您的第二个答案仅抑制消息,虽然不完全回答了我的问题,但已经令人满意。 - grimmkdir
还是cd
),我也不知道有没有办法在FTP会话中测试/捕获该错误,因此当与原始代码一起使用时,选择性静音可能是您能得到的最好的结果。 - Etan Reisner