Объем FTP загружает и переименовывает

Если у Вас есть вещи на установке Ubuntu, к которой Вы хотите получить доступ в будущем, то я избежал бы предложения Rory Alsop; иначе, его самый легкий путь, если Вы не возражаете терять все, что Вы имеете.

Одна хорошая вещь о Linux состоит в том, что конфигурации, предпочтения, и т.д., являются всеми в файлах, которые могут быть скопированы, в отличие от окон с ее реестром. Так, если Вы вообще технически склонны (не обязательно гуру), Вы могли бы использовать живой Linux CD, такой как CD Ubuntu, выполнить gparted и создать раздел, достаточно большой для любых данных, которые можно хотеть сохранить. Если бы у Вас есть какие-либо данные Windows, Вы хотите сохранить, это было бы хорошим временем, чтобы сделать это при использовании живого CD.

Затем выполните установку WUBI и скопируйте данные или Ваш корневой каталог, к новому разделу, удостоверившись получать скрытые файлы.

После того как Вы делаете это, можно переформатировать Windows Partition и установить Ubuntu там (все из программы установки). После того как Вы получаете все способ, которым Вы хотите, можно выполнить gparted, чтобы удалить меньший раздел и вырастить основной раздел к полному размеру.

2
29.08.2013, 21:58
4 ответа

Ну, я сделал своего рода смешанную реализацию, на основе ответов Stephane и slm. Я не мог использовать zsh, потому что рабочий сервер, и установка новой оболочки не является опцией, таким образом, я использовал lftp, который был установлен:

Объяснение: На первом here_docs (FTPLISTGET) подключение на FTP-сервере и списке файлы (nlist). Если список был успешен ( if [ $? -eq 0 ] ) загрузите, один файл одним переименованием с текущей датой в год формата, месяц, день, час, минуту, наносекунду). Некоторые ftps сверкают быстро и сохраняют второе, мог перезаписать файлы.

exec_ftp(){

# LIST
LIST_FTP=`lftp $protocol://$url << FTPLISTGET
        user $user $pass
        nlist
        bye
FTPLISTGET`

# Check if list is not empty, proceed...
if [ $? -eq 0 ]; then
        echo "$LIST_FTP" | while read file
        do
                DEST="N_$(date +%Y%m%d%H%M%N).TXT"
                lftp $protocol://$url <<-DOWNLOAD
                        user $user $pass
                        cd $remotedir
                        get $file -o /home/user/$DEST
                        rm $file
                        bye
                DOWNLOAD
        echo "Done in $(date +%d/%m/%Y-%T)" >> /var/log/transfer_ftp.log
        done

# If listing is not possible, 
else
        echo "FTP: $url user: $user - Cant reach host, or wrong credentials" >> /var/log/transfer_ftp_error.log
fi

}

Редактирование 1: Измененные обратные галочки к $(...) как предложено slm, и добавил переменную $protocol. Почему? Поскольку lftp может загрузить и автоматизировать sftp и ftps, и это будет довольно хорошо нам :)

2
27.01.2020, 21:50
  • 1
    Прохладное решение! Одно предложение состояло бы в том, чтобы выгрузить обратные галочки (..) и замените их $(..). Обратные галочки удерживаются от использования. Можно ли прокомментировать то, что продолжается так, чтобы, если кто-либо сталкивается с этим в будущем, было ясно, что продолжается? Абзац или 2 был бы большим. –  slm♦ 29.08.2013, 22:33

С zsh:

autoload zfinit
zfinit
zmodload zsh/datetime

files=N*.TXT
zfopen $host $user $passwd &&
  zfcd $remotedir &&
  zfrglob files &&
  for f ($files) {
    t=$EPOCHREALTIME
    strftime -s ts %H%M%S ${t%.*}
    ts=$ts.${t#*.}
    zfgcp -Gt $f N_$ts.TXT
  }
zfclose
3
27.01.2020, 21:50
  • 1
    Да. Я понял, что ftp был очень ограничен, и я должен был изменить свой сценарий для поведения подобный Вашему, но без zsh :) - спасибо за информацию так или иначе –   29.08.2013, 22:30

Простой способ сделать сложные вещи с FTP не состоит в том, чтобы иметь дело с FTP. Смонтируйте ресурс FTP как файловую систему. FUSE широко доступен в наше время, даже на серверах с ограниченными конфигурациями программного обеспечения. Можно использовать Curlftpfs для монтирования каталогов FTP.

mkdir /net/someftp.example.com
curlftpfs -o user=bob someftp.example.com /net/someftp.example.com

Сохраните пароль FTP в ~/.netrc.

Затем используйте нормальные команды оболочки для копирования файлов с именами, которые Вы хотите. Я не рекомендую эту схему даты микросекунды, поскольку Вы зависите от часов, обновляющих достаточно быстро, который мог быть проблематичным особенно, если часы корректируются, в то время как Ваш сценарий работает. Используйте счетчик вместо этого.

counter=10000
date=$(date +%Y%m%d-%H%M%S)
for x in /net/someftp.example.com/dir/N*.txt; do
  cp -p "$x" "N-$date-${counter#1}.TXT"
  counter=$((counter+1))
done

Когда Вы закончите с каталогом FTP, размонтируйте его с fusermount -u /net/someftp.example.com.

2
27.01.2020, 21:50
  • 1
    Это могло быть решение также. :). Я просто не знаю, как это действовало бы на диапазон 60 FTP-серверов. Я объясняю просто часть проблемы здесь и решение, которое получит те файлы (связанный EDI) от большого количества клиентов (приблизительно 60)... Если шоу curlftps, стабильные на этой среде, мог бы упростить много нашего сценария :) –   30.08.2013, 14:21

ftp не кажется мне соответствующим инструментом, чтобы сделать это с. Я попробовал бы lftp вместо этого. Поскольку у Вас есть он, написал сценарий строки:

    nmap N*.TXT N_`date "+%H%M%N"`.TXT

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

Что-то вроде этого "могло" бы работать через lftp:

$ lftp -u user,password IP <<EOF
!whoami
quit 0
EOF

У меня нет доступа к FTP-серверу в настоящее время, таким образом, я не могу протестировать это. Если это работает затем, Вы можете изменять его так, чтобы date команда работает на удаленном сервере.

Ссылки

3
27.01.2020, 21:50
  • 1
    спасибо за справку. После чтения документов я нашел nlist, который мог помочь мне много получить опции файла, не имея необходимость переносить строки и colums с любым другим программным обеспечением :) –   29.08.2013, 22:29

Теги

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