Como executo o find, o maxdepth e outros comandos no lcd enquanto uso o ftp?

0

Eu tenho o comando trabalhando localmente usando comandos normais. Agora preciso que ele seja executado ao usar ftp.

Eu entendo que preciso usar '!' E, em vez de copiar, precisarei usar put para funcionar no lcd, mas não tenho certeza de onde posicionar o '!'. Alguém poderia me apontar para um bom tutorial ou me apontar na direção certa?

E, em vez de Copy, precisarei usar put.

Aqui está o meu código, que funciona localmente, mas não dentro do 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

Aqui está o código FTP que é onde eu quero incorporar o acima:

#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

Eu recebo um 5507 Segmentation fault: 11 que aponta para o EOT na linha final

    
por smj2393 10.04.2015 / 17:20

2 respostas

1

monte o recurso ftp localmente com:

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

e faça o que quiser como um sistema de arquivos local

    
por 11.04.2015 / 01:11
0

Copie seus comandos e coloque-os em um script, chame de algo como filecheck.sh. Então, o script será parecido com isto:

#!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

Torne-o executável com chmod +x filecheck.sh e você pode executar este script remotamente com ssh [USER-NAME]@[REMOTE-HOST] filecheck.sh Nós vamos usar o lftp, então instale-o com o que você precisa (você não especificou seu sistema operacional, mas para o CentOS use sudo yum install lftp ou o uso do Ubuntu / Mint sudo apt-get install lftp Crie um novo script chamado algo como upload.sh e preencha da seguinte forma:

    #!/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

Torne-o executável com chmod como acima. (Novamente, você pode executá-lo remotamente usando ssh como acima). Ele cria um subdiretório a partir do ftp atual, onde ele coloca o script de upload que é gerado e depois usado pelo lftp. Quando o comando lftp é executado, também armazena o arquivo de log lá, lftpupload.log, onde você pode ver o que aconteceu.

Você não deu informações suficientes sobre a localização local que deseja copiar, então eu uso $ {filename} acima. Você precisará extraí-lo primeiro ou apenas alterar o script para copiar tudo nesse diretório.

O homem lftp é útil. Eu uso o lftp para alterar dados em páginas html (cerca de 200 deles) e, em seguida, criar e executar um script para atualizá-los automaticamente. Alterar (por exemplo) a data no rodapé em todas as minhas páginas da Web leva menos de um minuto usando esse método.

EDIT: Você não pode executar o find dentro do ftp, como você pediu originalmente. Mas você pode executar o comando find, ou scripts remotamente e, em seguida, criar um script lftp para automatizar o uso do lftp.

    
por 10.04.2015 / 20:09