put *. * перемещает только несколько файлов из локальной папки в SFTP

Я пытаюсь переместить все файлы в папке в папку SFTP, используя сценарий оболочки для моего пакетного задания. Но каждый раз при запуске перемещается только несколько файлов. Не все файлы.

/usr/local/bin/expect -c "spawn sftp -o Identityfile="/export/home/user/.ssh/example.ppk" $SFTP_USERID@$SFTP_SERVER
expect \"password: \"
send \"$PASSWORD\n\"
expect \"sftp> \"
send \"cd $DESTDIR\r\"
expect \"sftp> \"
send \"lcd $LOCALDIR\r\"
expect \"sftp> \"
send \"put *.* \r \"
expect \"sftp> \"
send \"quit\r\"
expect \"sftp> \"" >> $BATCH_DIR/logs/batch"$todaydatetime".log   

Этот сценарий запускается каждый раз успешно, но только несколько файлов перемещаются в папку назначения SFTP. В журналах я всегда вижу только 19 файлов, загруженных из локальной папки в папку SFTP (каждый раз одни и те же файлы). Я понимаю, почему каждый раз одни и те же файлы, но я не могу понять, почему только несколько файлов.

Есть ли ограничение по времени, в течение которого команда SFTP будет активна?

Пожалуйста, помогите мне также, как я могу изменить команду, чтобы принимать только новые файлы. "rsynch" не работает.

Привет, Кенстер, у меня mput не работал. Передаваемые файлы - это файлы в моей локальной папке, названия которых начинаются с цифр. В моей локальной папке находится 236 файлов, из которых 19 файлов, начинающиеся с цифр, передаются, даже если в имени файла или расширении файла есть пробелы, это может быть pdf или xls или что-то еще, но всегда те же 19 файлов передаются ЗНАЧЕНИЕ, а не передается один файл, который начинается с алфавита. Я попробовал те же шаги вручную, чтобы проверить, вызывают ли имена / разрешения файлов некоторые проблемы, но вручную все работает нормально: (все файлы переданы.

Извините, ребята, за ошибку.

Я только что добавил строки ниже после шага ЖК-дисплея. Сейчас передается всего 6 файлов. ожидайте \ "sftp> \" send \ "lls -ltr \ r \"

Проблема выглядит как-то еще не с командами или именами файлов.

Я повторяю date '+%Y%m%d%H%M%S' перед и в конце всех шагов. программы выполнялись только 12 секунд каждый раз. Это должно быть в моей среде. Я работаю в ограниченной среде. Спасибо ребята. Но все же может помочь мне выбрать только новые файлы (мой босс не принимает перемещение старых файлов в папку резервного копирования).


person jack    schedule 27.01.2015    source источник
comment
Нет предела. Можете ли вы запустить тест из командной строки в подробном режиме (sftp -v -v -v) и включить вывод команды в свой вопрос?   -  person Martin Prikryl    schedule 27.01.2015
comment
Если ответ @ mark-setchell не решает вашу проблему, не могли бы вы отредактировать свой вопрос, включив в него примеры имен файлов, которые передаются, и тех, которые нет?   -  person Kenster    schedule 27.01.2015
comment
Пожалуйста, включите конкретные примеры, а не их описание.   -  person Martin Prikryl    schedule 27.01.2015


Ответы (2)


Измените строку:

send \"put *.* \r \"

to

send \"mput * \r \"

поскольку PUT *.* - уродливый Windows-изм.

Вам также следует подумать о том, чтобы заключить $DESTDIR и $LOCALDIR в двойные кавычки, если они содержат пробелы.

person Mark Setchell    schedule 27.01.2015
comment
Привет @mark: я уже пробовал mput, как вы упомянули .. Он также ведет себя так же. Мой целевой каталог будет / sftpvc / user / pro / att, а локальный каталог - / app / weblogic / user / attachments. - person jack; 27.01.2015
comment
Возможно, вам потребуется заранее отправить PROMPT OFF. - person Mark Setchell; 27.01.2015
comment
Что произойдет, если вы введете те же самые команды в терминал вместо использования сценария? - person Mark Setchell; 27.01.2015
comment
Промт вариант попробую завтра марки. Если я запускаю шаги вручную, все работает, как ожидалось. - person jack; 27.01.2015
comment
Но пробовали ли вы * (вместо *.*)? В * nix *.* не будет соответствовать файлам, в имени которых нет точки. В противном случае mput является псевдонимом для put, не имеет значения, какой из них вы используете. Также нет prompt off в sftp. И prompt off, и mput являются FTP-измами. - person Martin Prikryl; 27.01.2015
comment
Спасибо, Мартин, но * в моем сценарии тоже самое ... Все файлы будут только с точкой. В любом случае я пытался увидеть, есть ли разница. Но без разницы. Пробовал mput , ставил *, mput *., ставил . - person jack; 28.01.2015

Вы можете попробовать использовать sshfs, а затем использовать «обычные» команды, такие как cp, которые должны дать вам больше возможностей и которые должны вести себя как обычная файловая система.

sshfs $SFTP_USERID@$SFTP_SERVER: /temporary/mount/path
cp -R $LOCALDIR/* /temporary/mount/path/$DESTDIR
fusermount -u /temporary/mount/path/
person noreabu    schedule 27.01.2015
comment
Привет @noreabu: sshfs тоже недоступен. Не могу установить новые библиотеки. Как вы думаете, в моем сценарии есть какие-то проблемы? Потому что, если я выполню те же шаги вручную, у меня не возникнет никаких проблем. Все файлы перемещены. - person jack; 27.01.2015