LINUX.ORG.RU

Ответ на: комментарий от anonymous

>man du

Почитал. "du - Подчсчитывает использование диска каждым файлом......"

Т.о. в моём случае du возвращает значение кратное 4096 байт. И с ftp всё равно не читает.

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

anonymous
()
Ответ на: комментарий от anonymous

если установлен ncftp, можно парсить вывод ncftpls

ananas ★★★★★
()

запарси вывод ftp, или прочитай про возможности wget

grustnoe ★★
()

Синхронизацию хотим сделать? С ftp это будет весьма муторно и неэкономно по трафику (если изменился 1 байт в начале файла или поменялся размер, надо перекачивать весь файл).

Если есть шелл (или тамошний админ согласен поставить указанный ниже софт сам) на удаленной машине, смотрите в сторону rsync. Специально предназначенная вещь для синхронизации пары хранилищ. Как еще один бонус получите перекачку не файлов целиком, а только различающихся фрагментов.

Obidos ★★★★★
()
Ответ на: комментарий от Obidos

Не синхронизацию. Просто после закачки файла требуется проверить, успешно ли он закачан, т.к. канал не ахти какой и частенько пропадает. Проверяю, сравнивая размеры на ftp и оригинала. Если отличаются,повторяю заканчку и так до победного конца. Наверняка есть более правильное решение (типа закачка с докачкой), но честно говоря мне некогда разбираться, я не админ.

Но раз я начинал вопрос о bash, ответьте пож. на пару вопросов. if [-e my_file] #истина, если файл существует но никак не получается определить, что его нет, без использования else. if [! -e my_file] #это не проходит!

И ещё. Почему в одном случае можно занести в переменную результат программы, например: MYVAR=`ls -l` а в другом случае нет: MYVAR=`wget ftp://MY_SERVER/incoming/my_file -nv` Приходится использовать промежуточный файл

Спасибо.

anonymous
()
Ответ на: комментарий от anonymous

> Наверняка есть более правильное решение (типа закачка с докачкой)

rsync, будет качать, пока не приемник не станет идентичным источнику.
Еще посмотрите http://itooktheredpill.dyndns.org/wput/ -- "wget наоборот". Если удаленный сервер не поддерживает докачку "в себя",
это все бесполезно.

> if [! -e my_file] #это не проходит!

Странно. 

tony:~/build/1$ bash --version
GNU bash, version 2.05a.0(1)-release (i386-slackware-linux-gnu)
Copyright 2001 Free Software Foundation, Inc.

tony:~/build/1$ cat test.sh
#!/bin/bash                                                            
if [ ! -e $1 ]; then
    echo "No such file:" $1
fi

tony:~/build/1$ ls -l
-rw-r--r--    1 tony     users           0 Jan 27 08:49 a
-rwxr--r--    1 tony     users          64 Jan 27 11:13 test.sh*

tony:~/build/1$ ./test.sh a
tony:~/build/1$ ./test.sh b
No such file: b

> Почему в одном случае можно занести в переменную 
результат программы, например: MYVAR=`ls -l` 
а в другом случае нет: MYVAR=`wget ftp://MY_SERVER/incoming/my_file -nv`

Возможно, дело в том, что wget выводит не в stdout, а в stderr.
Обычно оба эти потока направлены на консоль. Попробуйте так:

MYVAR=`wget ftp://MY_SERVER/incoming/my_file -nv 2>&1`

Obidos ★★★★★
()
Ответ на: комментарий от anonymous

> Когда между скобкой и операторо есть пробел!

А то. Где-то в man bash (лень искать) прямым текстом есть указание такого требования.

Obidos ★★★★★
()
Ответ на: комментарий от anonymous

> Когда между скобкой и операторо есть пробел!

не во всех шеллах [ это встроенная команда. Так что там должен быть пробел как после любой другой команды. [ это то же что test. man test.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.