通常のコマンドを使用してローカルで実行しました。これで、ftpを使用するときにそれを実行する必要があります。
「!」を使用する必要があることを知っています。 LCDで動作するには、コピーの代わりに挿入を使用する必要がありますが、「!」をどこに配置するのかわかりません。誰でも私に良いチュートリアルを教えたり、正しい方向を教えてもらえますか?
Copyの代わりにPutを使用する必要があります。
ローカルでは動作しますが、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を使いますので、必要に応じてインストールしてください(OSを指定していませんが、CentOSを使用するsudo yum install lftp
かUbuntu / Mintを使用する場合は、sudo apt-get install lftp
アップロードなどのスクリプトという名前の新しいスクリプトを作成します)。 .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を使用してリモートで実行することもできます。)lftpが生成して使用するアップロードスクリプトを含むftpという名前の現在のサブディレクトリからサブディレクトリを作成します。 lftpコマンドが実行されると、ログファイルlftpupload.logも保存され、何が起こったかを確認できます。
コピーするローカルの場所に関する情報が不足しているため、上記で$ {filename}を使用しました。まず、解凍するかスクリプトを変更して、そのディレクトリのすべての内容をコピーする必要があります。
男lftpが便利です。私はlftpを使ってHTMLページ(約200ページ)のデータを変更し、スクリプトを生成して実行して自動的に更新します。この方法では、すべてのWebページフッターの日付を変更するのに1分もかかりません。
編集:元の要求に従ってftp内でfindを実行することはできません。ただし、findコマンドまたはスクリプトをリモートで実行し、lftpスクリプトを生成して自動的にlftpを使用できます。