Если у Вас есть вещи на установке Ubuntu, к которой Вы хотите получить доступ в будущем, то я избежал бы предложения Rory Alsop; иначе, его самый легкий путь, если Вы не возражаете терять все, что Вы имеете.
Одна хорошая вещь о Linux состоит в том, что конфигурации, предпочтения, и т.д., являются всеми в файлах, которые могут быть скопированы, в отличие от окон с ее реестром. Так, если Вы вообще технически склонны (не обязательно гуру), Вы могли бы использовать живой Linux CD, такой как CD Ubuntu, выполнить gparted и создать раздел, достаточно большой для любых данных, которые можно хотеть сохранить. Если бы у Вас есть какие-либо данные Windows, Вы хотите сохранить, это было бы хорошим временем, чтобы сделать это при использовании живого CD.
Затем выполните установку WUBI и скопируйте данные или Ваш корневой каталог, к новому разделу, удостоверившись получать скрытые файлы.
После того как Вы делаете это, можно переформатировать Windows Partition и установить Ubuntu там (все из программы установки). После того как Вы получаете все способ, которым Вы хотите, можно выполнить gparted, чтобы удалить меньший раздел и вырастить основной раздел к полному размеру.
Ну, я сделал своего рода смешанную реализацию, на основе ответов 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, и это будет довольно хорошо нам :)
С 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
Простой способ сделать сложные вещи с 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
.
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
команда работает на удаленном сервере.
..
) и замените их$(..)
. Обратные галочки удерживаются от использования. Можно ли прокомментировать то, что продолжается так, чтобы, если кто-либо сталкивается с этим в будущем, было ясно, что продолжается? Абзац или 2 был бы большим. – slm♦ 29.08.2013, 22:33