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개)의 데이터를 변경한 다음 스크립트를 생성하고 실행하여 자동으로 업데이트합니다. 이 방법을 사용하면 내 모든 웹페이지 바닥글의 날짜를 변경하는 데(예를 들어) 1분도 채 걸리지 않습니다.

편집: 원래 요청한 대로 ftp 내에서는 find를 실행할 수 없습니다. 그러나 find 명령이나 스크립트를 원격으로 실행한 다음 lftp 스크립트를 생성하여 자동으로 lftp를 사용할 수 있습니다.

관련 정보