Получение последнего измененного файла в каталоге через FTP с использованием bash-скрипта с curl - PullRequest
2 голосов
/ 27 сентября 2011

Я пишу сценарий bash, и одна из задач, которые необходимо выполнить, - подключиться к FTP-серверу с помощью curl и найти имя последнего измененного ZIP-файла.

Формат именифайлы, которые мы просматриваем: MM_DD_YYYY_ALL.zip.

Пока что у меня есть пропуски в << >>:

export FILEPATTERN=_ALL.zip

for FILE in `curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\  '{print $9}'`
do
    ...
    # Do stuff with each file to determine most recent version.
    ...
done

Тот факт, что имя файла не отформатировано YYYY_MM_DDПохоже, это главная причина, по которой это невозможно сделать с помощью некоторых быстрых усечений и вычислений.

Существует ли эффективный способ извлечь имя самого последнего измененного zip-файла из этого списка?Или есть какая-то обработка, которая может быть выполнена во время создания списка?

Приветствия.

Ответы [ 2 ]

4 голосов
/ 27 сентября 2011

Вы можете отсортировать имена файлов за один раз с помощью многоклавной команды sort и захватить последнюю строку с помощью tail, чтобы получить последний файл.

Вам нужно будет указать -t-, чтобы использовать тире в качестве разделителя полей сортировки, -n, чтобы получить числовую сортировку, и перечислить каждое поле в порядке его приоритета. Формат для спецификатора поля:

-k, --key=POS1[,POS2]     start a key at POS1 (origin 1), end it at POS2
                          (default end of line)

Таким образом, для года, поле 3, вам нужно указать его ширину в 4 символа как -k3,4.

Если вы сортируете по полям года, месяца и дня в указанном порядке, вы получите список, в котором все файлы расположены в указанном порядке.

Таким образом, вместо цикла for, вы можете использовать:

FILE=`curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\  '{print $9}'
    | sort -n -t- -k3,4 -k1,2 -k2,2 |tail -1`
0 голосов
/ 04 июня 2013

Редактировать: Извините, я только что понял, что нужные вам файлы находятся на удаленном FTP-сервере. Я думал, что они были локальными, и вы надеялись загрузить на FTP. Так что все ниже не имеет значения.

Обычно я делаю что-то вроде: ls -1rt /path/to/zips/*.zip | хвост -n1

Это не всегда хорошая идея, пробелы в именах файлов и т. Д. Но он вернет самое последнее имя файла в каталоге.

Там также найти. Вы можете указать диапазон дат и имя. В зависимости от того, что вы делаете, вы можете сканировать каталог каждые x минут на наличие файлов, созданных за последние x минут. Преимущество этого заключается в том, что он подберет несколько новых файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...