monte o recurso ftp localmente com:
curlftpfs [user@]host:[dir] mountpoint [options]
e faça o que quiser como um sistema de arquivos local
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
monte o recurso ftp localmente com:
curlftpfs [user@]host:[dir] mountpoint [options]
e faça o que quiser como um sistema de arquivos local
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.