FTPから「ディレクトリXの最新ファイル」を自動的にアップロードする安定した方法は何ですか?

FTPから「ディレクトリXの最新ファイル」を自動的にアップロードする安定した方法は何ですか?

このフォルダにはファイルがいっぱいです。

1 日に 1 回、最新のファイルを FTP 経由で自動的にファイルサーバーに転送したいと思います。

答え1

次の行を使用してファイル名を取得する短いスクリプトを作成します。

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

$dir興味のあるディレクトリであると仮定して)$filenameFTPコマンドを入力します。もちろん、cronこのスクリプトは1日1回実行されます。

その場合は、ファイルで次のコマンドを使用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/

ジョブの自動化

1つ追加予約されたこと毎日ミッションを行います。次の行を実行し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を作成すると、あなたは幸運な人です:)

関連情報