gpt4 book ai didi

Bash:使用 FTP 检查远程目录是否存在

转载 作者:行者123 更新时间:2023-11-29 09:14:38 24 4
gpt4 key购买 nike

我正在编写一个 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
}

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.

最佳答案

解决方法如下:

  1. 为确保您只使用一个 FTP 连接,您将输入(FTP 命令)创建为 shell 脚本的输出

    例如

    $ cat a.sh
    cd /home/test1
    mkdir /home/test1/test2

    $ ./a.sh | ftp $Your_login_and_server > /your/log 2>&1
  2. 要允许 FTP 测试目录是否存在,您可以使用“DIR”命令具有写入文件的选项这一事实

     # ...continuing a.sh
    # In a loop, $CURRENT_DIR is the next subdirectory to check-or-create
    echo "DIR $CURRENT_DIR $local_output_file"
    sleep 5 # to leave time for the file to be created
    if (! -s $local_output_file)
    then
    echo "mkdir $CURRENT_DIR"
    endif

    请注意 "-s" 测试不一定正确 - 我现在无法访问 ftp,也不知道在不存在的目录上运行 DIR 的确切输出是什么be - 冷是空文件,可能是特定错误。如果出错,可以grep $local_output_file中的错误文本

  3. 现在,将步骤 #2 包装到一个循环中,遍历 a.sh 中的各个子目录

关于Bash:使用 FTP 检查远程目录是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com