使用 ftp 时如何在 lcd 上运行 find、maxdepth 和其他命令?

使用 ftp 时如何在 lcd 上运行 find、maxdepth 和其他命令?

我已经使用普通命令在本地运行该命令。我现在需要它在使用 ftp 时运行。

我知道我需要使用“!”我需要使用 put 而不是复制,这样它就可以在液晶显示器上工作,但我不确定将“!”放在哪里。有人能给我指出一个好的教程或给我指出正确的方向吗?

我需要使用 put 而不是 Copy。

这是我的代码,可以在本地运行,但不能在 FTP 中运行:

#THE DIRECTORY THE ORIGINAL FILE IS STORED IN
MYDIR="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"

#THE DIRECTORY THE BACKUP FILE WILL BE STORED IN
DEST="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"



#FIND ALL DIRECTORIES AND NAME TEMP DIRECTORY AS CURRENT DIRECTORY UP TO MAX DEPTH (1 = 1 LEVEL DOWN)
find "${MYDIR}" -maxdepth 3 -type d | while read CURRENTDIRECTORY;
    do 

        #FINDS THE NEWEST ZIP FILE IN T HE DIRECTORY
        NEWESTFILE=`ls -dtr1 "${CURRENTDIRECTORY}"/*.zip | tail -n 1`

        #CHECK IF FILE IS PRESENT
        if [ -z "${NEWESTFILE}" ] ; then
            echo "No file to copy"

        #CHECK IF FILE IS A DIRECTORY
        elif [ -d "${NEWESTFILE}" ] ; then
            echo "Newest file is a directory"

        #COPY NEWEST FILE TO DEST
        else
            dir=$(dirname "$CURRENTDIRECTORY")
            mkdir -p "${DEST}$dir"
            echo "Copying ${NEWESTFILE} --> ${DEST}$CURRENTDIRECTORY"
            cp -p "${NEWESTFILE}" "${DEST}$CURRENTDIRECTORY/"
        fi

    done

#SORT FILES IN ORDER NEWEST FIRST AND IGNORE FIRST 2
ls -t1 "${DEST}"* | tail -n +3 | while read filename
        do
            #REMOVE THE REST
            echo "remove $filename"
            rm "$filename"
    done

这是 FTP 代码,我想在其中嵌入上面的代码:

#ftp the file to another server

#FTP SERVER
HOST='server'

#USERNAME
USER='username'

#PASSWORD
PASSWD='password'

ftp -n -v $HOST << EOT
ascii
user $USER $PASSWD
prompt
cd backup

lcd $MYDIR
lcd Original

#BY HERE I WANT TO RUN THE OTHER CODE


bye
EOT

5507 Segmentation fault: 11在最后一行得到一个指向 EOT 的信息

答案1

使用以下命令在本地挂载 ftp 资源:

curlftpfs [user@]host:[dir] mountpoint [options]

并像本地文件系统一样做任何你喜欢的事情

答案2

复制命令并将其放入脚本中,将其命名为 filecheck.sh 之类的名称。所以脚本看起来像这样:

#!bin/bash
#THE DIRECTORY THE ORIGINAL FILE IS STORED IN
MYDIR="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Original"
#THE DIRECTORY THE BACKUP FILE WILL BE STORED IN
DEST="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"
#FIND ALL DIRECTORIES AND NAME TEMP DIRECTORY AS CURRENT DIRECTORY UP TO MAX DEPTH (1 = 1 LEVEL DOWN)
find "${MYDIR}" -maxdepth 3 -type d | while read CURRENTDIRECTORY;
    do 
        #FINDS THE NEWEST ZIP FILE IN T HE DIRECTORY
        NEWESTFILE=`ls -dtr1 "${CURRENTDIRECTORY}"/*.zip | tail -n 1`
        #CHECK IF FILE IS PRESENT
        if [ -z "${NEWESTFILE}" ] ; then
            echo "No file to copy"
        #CHECK IF FILE IS A DIRECTORY
        elif [ -d "${NEWESTFILE}" ] ; then
            echo "Newest file is a directory"
        #COPY NEWEST FILE TO DEST
        else
            dir=$(dirname "$CURRENTDIRECTORY")
            mkdir -p "${DEST}$dir"
            echo "Copying ${NEWESTFILE} --> ${DEST}$CURRENTDIRECTORY"
            cp -p "${NEWESTFILE}" "${DEST}$CURRENTDIRECTORY/"
        fi
    done
#SORT FILES IN ORDER NEWEST FIRST AND IGNORE FIRST 2
ls -t1 "${DEST}"* | tail -n +3 | while read filename
        do
            #REMOVE THE REST
            echo "remove $filename"
            rm "$filename"
    done

使它可执行chmod +x filecheck.sh,你可以远程运行这个脚本ssh [USER-NAME]@[REMOTE-HOST] filecheck.sh 我们将使用lftp,所以用你需要的任何东西安装它(你没有指定你的操作系统,但对于CentOS使用sudo yum install lftp或Ubuntu / Mint使用sudo apt-get install lftp创建一个名为something的新脚本像 upload.sh 并按如下方式填充它:

    #!/bin/bash
    # Create lftp script
    [[ -d lftp ]]||mkdir lftp
    script="ftp/html-update.scp"
    hostname=your.hostname.com
    user="Your_ftpuser_ID"
    pass="Your_ftpuser_password"
    echo "debug -o lftp/lftp-upload-debug.txt 5" > $script
    echo "open -u $user,$pass $hostname" >> $script
      rdir="/Users/Stu/Documents/Hoffi Work/FTP Backup Shell Script/Backup1"
      ldir="local/path/where/you/want/the/copy/"
      echo "cd $rdir" >> $script
      echo "lcd $ldir" >> $script
      echo asc >> $script
      echo "put -a ${filename}" >> $script
    echo "exit" >> $script
lftp -f "${script}" > ftp/lftpupload.log

如上所述,使用 chmod 使其可执行。 (同样,您可以像上面一样使用 ssh 远程执行它。)它从当前名为 ftp 的子目录中创建一个子目录,其中放置生成并由 lftp 使用的上传脚本。当 lftp 命令运行时,它还会将日志文件存储在其中,lftpupload.log 您可以在其中查看发生的情况。

您没有提供有关要复制到的本地位置的足够信息,因此我使用上面的 ${filename} 。您需要先提取它,或者只是更改脚本以复制该目录中的所有内容。

男人lftp很有用。我使用 lftp 更改 html 页面(大约 200 个)中的数据,然后创建并运行脚本来自动更新它们。使用此方法更改(例如)我所有网页页脚上的日期只需不到一分钟。

编辑:正如您最初要求的那样,您无法在 ftp 中运行 find 。但您可以远程运行 find 命令或脚本,然后创建 lftp 脚本来自动使用 lftp。

相关内容