FTP에서 "디렉토리 X의 최신 파일"을 자동으로 업로드하는 안정적인 방법은 무엇입니까?

FTP에서 "디렉토리 X의 최신 파일"을 자동으로 업로드하는 안정적인 방법은 무엇입니까?

이 폴더에는 파일이 가득 차 있습니다.

하루에 한 번씩 최신 파일이 FTP를 통해 자동으로 파일 서버로 전송되기를 원합니다.

답변1

다음 줄을 사용하여 파일 이름을 가져오는 짧은 스크립트를 만듭니다.

newestfilename=`ls -t $dir| head -1`

( $dir관심 있는 디렉터리라고 가정하고) $filenameFTP 명령을 입력합니다. 물론 cron이 스크립트는 하루에 한 번 실행됩니다.

그렇다면 파일에서 다음 명령을 사용할 ncftp수 있습니다 .ftp

ncftpput -Uftpuser -Pftppasswd ftphost /remote/path $dir/$newestfilename

ncftp가 없으면 다음과 같이 작동할 수 있습니다.

ftp -u ftp://username:[email protected]/path/to/remote_file $dir/$newestfilename

답변2

최신 파일 찾기

디렉토리에서 최신 파일을 찾는 가장 쉬운 방법은 zsh와 해당 파일을 사용하는 것입니다.글로벌 예선 om수정 시간별로 정렬하고 [1]가장 최근 일치 항목을 선택합니다.

upload /path/to/dir/*(om[1])

좋은 휴대용 방법은 없습니다. 이식 가능한 유일한 방법은 ls -t날짜별로 파일을 나열하고 결과를 구문 분석하는 것입니다.파싱에는 ls위험이 따른다. 파일 이름에 줄 바꿈이나 인쇄할 수 없는 문자가 포함되어 있지 않다고 확신하는 경우에만 이 작업을 수행하십시오.

upload "$(ls -t /path/to/dir | head -n 1)"

FTP 업로드

업로드에는 다양한 도구가 있습니다. 일반적으로 사용되는 설치 방법은곱슬.

curl -T /path/to/local/file ftp://ftp.example.com/remote/dir

또 다른 접근 방식은 원격 디렉터리를 파일 시스템으로 마운트하는 것입니다.컬 파일 시스템.

mkdir ftp.example.com
curlftpfs ftp.example.com ftp.example.com
cp -p /path/to/local/file ftp.example.com/remote/dir/

작업 자동화

하나 추가예약 된 일들매일 미션을 수행하세요. 다음과 같은 줄을 실행 crontab -e하고 추가하세요.

SHELL=/bin/zsh
42 3 * * * curl -T /path/to/dir/*(om[1]) ftp://ftp.example.com/remote/dir

답변3

이것은 제가 직접 만든 스크립트입니다.

#! /usr/bin/bash

SRCFOLDER="$1"
mountpoint="/home/$(whoami)/ftp"
mkdir "$mountpoint" > /dev/null 2>&1 # temporary ftp path

if [ $(whoami) == "root" ]
    then
        echo "Dont execute as root!"
        exit -1
fi

if [ $# != 1 ]
then
    echo "Usage: terser (/source/folder)"
    exit 1
fi

if [ "${SRCFOLDER: -1}" != "/" ] # adds a "/" at end of path
    then 
        SRCFOLDER+="/"
fi

if [ -e "$SRCFOLDER" ]
    then
        FILE=$(ls -t1 $SRCFOLDER | head -n 1)
        echo "Newest file is: $FILE"
        if [ $FILE == "" ]
            then
            echo "The folder $SRCFOLDER is empty!"
        fi
        echo "Mounting ftp..."
        curlftpfs "username:[email protected]" "$mountpoint" "-o" "disable_eprt" # if you use tls(port 22) do: "disable_eprt,tlsv1"
        echo "Mounted FTP"
        echo "Copying to ftp..."
        cp "$SRCFOLDER$FILE" "$mountpoint/path/" # after "$mountpoint/" enter your path for your backups
        echo "Copied to ftp"
        sleep 2
        fusermount -u $mountpoint
        echo "Unmounted ftp"
        sleep 3
        rmdir "$mountpoint"
else
    echo "The folder $SRCFOLDER does not exist!"
fi

! 33행과 36행을 편집하세요! (FTP 서버의 FTP 연결 및 경로)

/usr/bin/* 또는 /sbin/*에 넣고 파일 이름과 소스 폴더로 실행하면 됩니다. 예를 들어:

scriptname /home/archuser/backups/

다른 방법:

스크립트를 파일에 넣고 다음을 수행하십시오.

./scriptname /home/archuser/backups/

또는

bash scriptname /home/archuser/backups/

이를 위해 CronJob을 생성하면 당신은 운이 좋은 사람입니다 :)

관련 정보