FTPを使用するときにLCDでfind、maxlength、およびその他のコマンドを実行する方法は?

FTPを使用するときにLCDでfind、maxlength、およびその他のコマンドを実行する方法は?

通常のコマンドを使用してローカルで実行しました。これで、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を使用できます。

関連情報