web-dev-qa-db-ja.com

SFTP:1つのフォルダーから別のフォルダーに(1つずつではなく)多くのファイルを移動(名前変更)

すべてのファイルを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

mvコマンドがありません。私は[〜#〜] rnft [〜#〜]を試しましたが、うまくいきませんでした。

これで、名前の変更を使用できます。

 rename current_path/myFile.txt current_path/DestinationFolder/myFile.txt

そしてそれは大丈夫です。しかし、ファイルのall(またはmany)を移動する必要があります。以下は機能しませんでした:

 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 /"のようなことはできません

私はこのサーバーを台無しにしてはいけません。これは、スクリプトもアクティビティもありません。私は非常に制限されています。

これを解決する方法をお勧めしていただけませんかお願い ??

[〜#〜] note [〜#〜]:これはSOLARISにあります。

7
Kani

私は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.
2
Sc0rian

OpenSSH sftpは、そのようなタスクのための非常に強力なクライアントではありません。 2回実行する必要があります。最初にファイルのリストを収集し、リストを使用してコマンドのリストを生成し、2回目の実行でそれらを実行します。

このようなもの:

files=`sftp -b - [email protected] <<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 - [email protected]

本番ファイルでスクリプトを実行する前に、生成されたコマンドリストをファイルに出力して、結果が期待どおりかどうかを確認することをお勧めします。

最後の行を次のように置き換えます。

) > commands.txt
2
Martin Prikryl