Можно попытаться переустановить личинку, я думаю, что это воссоздает папку начальной загрузки. Не слишком уверенный, хотя, но это не может причинить боль...
Сделайте короткий сценарий, получите имя файла через эту строку:
newestfilename=`ls -t $dir| head -1`
(принятие $dir
каталог, Вы интересуетесь), затем питайтесь $filename
к Вашей команде FTP, и конечно, cron
этот сценарий для выполнения один раз в день.
Если Вы имеете ncftp
, можно использовать следующую команду для ftp
файл:
ncftpput -Uftpuser -Pftppasswd ftphost /remote/path $dir/$newestfilename
Без ncftp это может работать:
ftp -u ftp://username:passwd@ftp.example.com/path/to/remote_file $dir/$newestfilename
Самый легкий способ найти новейший файл в каталоге состоит в том, чтобы использовать zsh и его спецификаторы шарика om
к виду ко времени изменения и [1]
выбрать новое соответствие.
upload /path/to/dir/*(om[1])
Там бесполезно, портативный метод. Единственный портативный метод должен использовать ls -t
перечислить файлы по дате и проанализировать результат, но парсинг ls
чревато опасностями. Сделайте это, только если Вы уверены, что Ваши имена файлов не содержат новых строк или непечатаемых символов.
upload "$(ls -t /path/to/dir | head -n 1)"
Для загрузки существует много инструментов. Обычно устанавливаемый является завихрением.
curl -T /path/to/local/file ftp://ftp.example.com/remote/dir
Другой подход должен смонтировать удаленный каталог как файловую систему, например, с curlftpfs.
mkdir ftp.example.com
curlftpfs ftp.example.com ftp.example.com
cp -p /path/to/local/file ftp.example.com/remote/dir/
Добавьте crontab запись для выполнения задачи каждый день. Выполненный crontab -e
и добавьте строку как это:
SHELL=/bin/zsh
42 3 * * * curl -T /path/to/dir/*(om[1]) ftp://ftp.example.com/remote/dir
Вот мой самодельный скрипт:
#! /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:password@ip.ad.re.ss" "$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! (ftpconnection и путь на ftpserver)
Просто поместите его в /usr/bin/ *или /sbin/ *и запустите его с именем файла и исходной папкой. например.:
scriptname /home/archuser/backups/
по-другому:
Поместите скрипт в файл и сделайте следующее:
./scriptname /home/archuser/backups/
или
bash scriptname /home/archuser/backups/
Просто создайте для этого CronJob, и вы счастливчик:)
head -1
сhead -2 | tail -1
Положительная сторона :) – Ansari 10.05.2012, 21:27ls
не хорошо в случае, если имя файла содержит smthing экзотичный, исключая, '\n'. удар – KAction 30.10.2012, 06:56