Я пытаюсь переместить файлы из одного места в другое на удаленном сервере, используя 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