このフォルダにはファイルがいっぱいです。
1 日に 1 回、最新のファイルを FTP 経由で自動的にファイルサーバーに転送したいと思います。
答え1
次の行を使用してファイル名を取得する短いスクリプトを作成します。
newestfilename=`ls -t $dir| head -1`
($dir
興味のあるディレクトリであると仮定して)$filename
FTPコマンドを入力します。もちろん、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を作成すると、あなたは幸運な人です:)