Перемещение файлов с использованием sftp

Я пытаюсь переместить файлы из одного места в другое на удаленном сервере с помощью sftp ниже:

for i in a b c d
do
sftp $REMUSR <<EOM>>$OUT 2>&1
rename $SOURDIR/sample_${i}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz $REMDIR
quit
EOM
:
:
done

но я получаю сообщение

Couldn't rename file "/source/sample_a_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz" to       "/destin/": No such file or directory

хотя этот файл существует в каталоге /source, который я проверил:

ls -l sample_a_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz
-rw-r--r--  1 prd admin 112 May 23 09:16 sample_a_20140330.gz

Пожалуйста помогите

2 ответа

Я думаю, что вам нужно указать имя файла назначения

sftp> rename f destin/
Couldn't rename file "/home/iain/s" to "/home/iain/destin/": No such file or directory
sftp> rename f destin/s

Я сделал быстрый поиск, и не похоже, что есть чистое решение для этого.

Во -первых, похоже, что на удаленном хосте отсутствует пункт назначения, а затем выглядит, как будто вы пытаетесь переименовать каталог в файл. если вы пытаетесь переименовать каталог, попробуйте использовать полный путь, а не использовать завершающий "/" (например, переименовать /home/mydir /home/otherdir)

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

Помните, что только потому, что вы выполняете на удаленном сервере, команды выполняются локально.

Другая возможность - использовать пакетный режим для запуска команд, а не метод <>, который вы используете.

Sftp не видит удаленных имен файлов для обработки подстановки, вместо этого используйте ssh с mv:

 ssh $REMUSR mv $SOURDIR/sample_${i}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].gz $REMDIR"

здесь подразумеваемый процесс удаленной оболочки выполнит подстановку и передаст результаты в mv

Другие вопросы по тегам