Что надежный путь состоит в том, чтобы автоматизировать загрузку FTP 'новейшего файла в каталоге X'?

Можно попытаться переустановить личинку, я думаю, что это воссоздает папку начальной загрузки. Не слишком уверенный, хотя, но это не может причинить боль...

4
10.05.2012, 00:02
3 ответа

Сделайте короткий сценарий, получите имя файла через эту строку:

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
3
27.01.2020, 20:56
  • 1
    Быстрый вопрос, если я изменяю 'голову-1' для 'заголовка-2', который получит второе в новейший файл? Я просто хочу удостовериться, что я не захватываю файл, который является серединой записи. –  MetaGuru 10.05.2012, 20:52
  • 2
    Нет, если бы Вы хотите второй файл, Вы заменили бы head -1 с head -2 | tail -1Положительная сторона :) –  Ansari 10.05.2012, 21:27
  • 3
    Это стоящий примечания, той передачи по каналу ls не хорошо в случае, если имя файла содержит smthing экзотичный, исключая, '\n'. удар –  KAction 30.10.2012, 06:56

Определение местоположения новейшего файла

Самый легкий способ найти новейший файл в каталоге состоит в том, чтобы использовать 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

Другой подход должен смонтировать удаленный каталог как файловую систему, например, с 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
1
27.01.2020, 20:56

Вот мой самодельный скрипт:

#! /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, и вы счастливчик:)

0
01.03.2020, 14:10

Теги

Похожие вопросы