Назад | Перейти на главную страницу

Перемещение файлов с помощью 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

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

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

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

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

Во-первых, похоже, что вам не хватает места назначения на удаленном хосте, а затем похоже, что вы пытаетесь переименовать каталог в файл. если вы являются пытаясь переименовать каталог, попробуйте использовать полный путь и не используйте завершающий "/" (например, rename / 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