Я искал высоко и низко и не смог найти решение своей проблемы. Я не уверен, является ли это надлежащим форумом, но я надеюсь, что кто-то здесь смог помогать.
Я использовал wget (FTP) для резервного копирования моего веб-сайта к моему локальному HD, с помощью зеркальной опции, без проблемы, до недавнего времени. Недавно, каталог, который содержит изображения, достиг предела, установленного услугой хостинга, поскольку, сколькими объекты могут быть в списке FTP. У меня нет доступа SSL к учетной записи.
Я могу запустить скрипт, на удаленном сервере, и получить полный каталог, перечисляющий (ls), в файле, и загрузить его на мою локальную машину.
Действительно ли возможно питаться, этот файл к wget и иметь его зеркально отражают те файлы к моему локальному диску, как это сделало до удара предела списка? Я хотел бы, чтобы wget прочитал сгенерированный список и проверку на измененные и добавленные файлы. Вот вопросы, на которые я не мог найти ответы:
1) Какова была бы надлежащая команда ls для генерации необходимой информации? В настоящее время я только получаю фактические имена файлов, но я уверен, что больше необходимо.
2) Будет wget с зеркальной опцией все еще работать с входным файлом, или это просто загрузит все файлы во входном файле, не проверяя на измененное состояние? Я не нашел абсолютно никакой информации об этой комбинации - только на одной или другом. Я не хочу тестировать и завершать получение полного резервного копирования каталога - трата пропускной способности и время для раскрытия всех тех данных.
Можно сделать это, единственная проблема получает вывод от ls, который является тем же на удаленном и на локальной машине. Мой ls имеет опцию - стиль времени = + % s, который показывает в прошлый измененный раз файла в секундах с эпохи, которая должна соответствовать на обеих машинах. Я предполагаю, что Вы только хотите сделать это для одного каталога, иначе find
было бы более соответствующим, если у Вас есть та команда.
На удаленном делают ls в необходимом каталоге в файл:
cd ... # cd to the directory to list
ls -l --time-style=+%s . >/tmp/listfile
На локальной машине скопируйте удаленное /tmp/listfile
к локальному /tmp/listfile
, затем используйте awk, чтобы подавить первые 4 столбца вывода и отсортировать список размера файла, даты и имени файла. (Я предполагаю, что у Вас могли бы быть имена файлов с пробелами следовательно причудливый awk).
awk '{$1="";$2="";$3="";$4="";print}' </tmp/listfile | sort >/tmp/a
В зеркальном каталоге получают тот же список:
cd ... # cd to same directory we listed remotely
ls -l --time-style=+%s . | awk '{$1="";$2="";$3="";$4="";print}' | sort >/tmp/b
Сравните два отсортированных списка и отбросьте строки, которые являются тем же с коммуникацией. Отбросьте размер и столбцы даты (и случайно вкладка в начале строк в/tmp/b не в/tmp/a и 2 межстолбца пробелов) и отбросьте дублирующиеся имена файлов с uniq. (Вы не должны сортировать снова, поскольку дублирующиеся строки смежны).
comm -3 /tmp/a /tmp/b | awk '{$1="";$2="";print substr($0,3)}' | uniq >/tmp/c
Список в/tmp/c является всеми файлами, которые являются новыми, другого размера или метки времени, или были удалены. Передайте каждого wget для выборки (все еще в соответствующем каталоге).
while read file
do rm -f "$file"
wget -N --no-directories ..../"$file" # non recursive single file to .
done </tmp/c
Необходимо настроить зеркало wget, чтобы больше не выбрать этот каталог.
Если можно сделать find ... -printf '%9s %T+ %p\n'
, Вы могли использовать этот вид техники, запускающейся наверху зеркального каталога, чтобы эффективно сделать зеркальное отражение себя.