Мне нужно переместить все файлы из current_path к current_path / DestinationFolder.
Я использую следующую версию SFTP: Протокол SFTP версии 2
Доступные команды:
sftp> help
Available commands:
cd path Change remote directory to 'path'
lcd path Change local directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
help Display this help text
get remote-path [local-path] Download file
lls [ls-options [path]] Display local directory listing
ln oldpath newpath Symlink remote file
lmkdir path Create local directory
lpwd Print local working directory
ls [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
put local-path [remote-path] Upload file
pwd Display remote working directory
exit Quit sftp
quit Quit sftp
rename oldpath newpath Rename remote file
rmdir path Remove remote directory
rm path Delete remote file
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
У меня нет мв команда. Я попытался RNFT и не сработало.
Теперь я могу использовать переименование:
rename current_path/myFile.txt current_path/DestinationFolder/myFile.txt
и это нормально. Но мне нужно переехать все (или много) файлов. Не сработало следующее:
rename current_path/* current_path/DestinationFolder/
Couldn't rename file "current_path/*" to "current_path/DestinationFolder/": Bad message
Нет доступа через SSH поэтому я не могу делать такие вещи, как echo "ssh login @ server mv * current_path / DestinationFolder /"
Я не должен связываться с этим сервером: никаких скриптов, никаких действий и т.д. Я очень ограничен.
Не могли бы вы порекомендовать мне способ решить эту проблему, пожалуйста??
НОТА: это в СОЛЯРИС.
OpenSSH sftp
не очень мощный клиент для таких задач. Вам придется запустить его дважды. Сначала соберите список файлов, используйте список для создания списка команд и выполните их во втором запуске.
Что-то вроде этого:
files=`sftp -b - user@example.com <<EOF
cd /source/folder
ls
EOF`
files=`echo $files|sed "s/.*sftp> ls//"`
(
echo cd /source/folder
for file in $files; do
echo get $file
echo rename $file /destination/folder/$file
done
) | sftp -b - user@example.com
Я предлагаю перед запуском сценария в производственных файлах сначала вывести сгенерированный список команд в файл, чтобы проверить, соответствуют ли результаты ожидаемым.
Просто замените последнюю строку на:
) > commands.txt
я согласен с cjc. Если вы действительно ограничены указанным выше, команда, которая позволит вам загружать файлы, помещается в local-path [remote-path] и возвращает scp. Хорошая ссылка Вот слишком.
Я бы использовал что-то вроде winscp хотя это делает вещи намного проще.
sftp> help put
USAGE: put local-path [remote-path] [-bg | -fg] [-s] [-o] [-r] [-b | -lf]
DESCRIPTION: Upload file.
PARAMETERS:
-bg Start (queue) transfer in background.
-fg Start transfer in foreground.
-s Include subdirectories (recursive).
-r Force existing incomplete file to be resumed.
-o Force existing file to be overwritten.
-b Upload all files as binary; no conversions.
-lf Use auto detection upload mode. Text files are uploaded
in Unix format, with LF as the line delimiter.
NOTES:
- If both '-r' and '-o' are specified, resume is tried first,
and if that fails, overwrite is used.
- '-std' and '-t' transfer mode options are also available
when SFTP version 4 or higher is in use.