SFTPセッションでファイル名を変更する

SFTPセッションでファイル名を変更する

これはSFTPファイル転送。

次のように進んでください。

  1. 拡張子があるファイルを確認し、.csvローカルディレクトリに配置します。
  2. 次に、リモート接続の別のフォルダに移動します。

コマンドを試しましたが、renameエラーが発生しました。「失敗する」

sftpのバッチファイルオプションを試しましたが、コマンドがファイルセットではなく特定のファイル名を期待しているよう-bです。rename

ではどうすればいいですか?

答え1

私に役立つので、問題に関する追加情報を提供する必要があります。

chris@localhost$ finger 2> file.txt
chris@localhost$ sftp remotehost
Connected to remotehost.
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# So the file doesn't exist on the remote in either form

sftp> put file.txt file.tmp
Uploading file.txt to /home/chris/file.tmp
file.txt                                                      100%  501     0.5KB/s   00:01
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.tmp

# It has arrived as file.tmp

sftp> rename file.tmp file.txt
sftp> ls -l file.txt
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.txt
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# And been successfully renamed

答え2

明らかにrenamesftpのコマンドはいいえソースとターゲットが異なるファイルシステムにあるときに機能します。

RedHat6、SLES9などでこれらの動作を見たことがあります。

答え3

これはOPが望んでいたものとまったく一致しないかもしれませんが、!command「SFTPセッション内でファイル名を変更する」にsftpが役に立つと思います。

  • SFTP ヘルプで: "!command - ローカルシェルで 'command' を実行する"

SFTPセッションでの使用法は次のとおりです。 (ローカル:macOS Catalina、リモート:Ubuntu 16.04.6 LTS)

sftp> lls
blankFileForVSCODEbrowser.txt   counties
sftp> !command mv  blankFileForVSCODEbrowser.txt blankFileForVSCODEbrowserRenameTest.txt
sftp> lls
blankFileForVSCODEbrowserRenameTest.txt counties

答え4

Bashシェルで次のことを試すことができます(1行に減らすこともできます)。

リモートsftp $server / $dirのすべてのcsvファイル名をtxtに変更します(パスワードアクセスがないと仮定)。

for f in `echo 'ls *.csv' | sftp -qp $user@$server:$dir | grep -v ^sftp`; do
    echo "rename '$f' '${f%.csv}.txt'" | sftp -qp $user@$server:$dir ;
done

または

# to move to $newpath folder:
for f in `echo 'ls *.csv' | sftp -qp $user@$server:$dir | grep -v ^sftp`; do
    echo "rename $f $newpath/${f##*/}" | sftp -qp $user@$server:$dir ;
done

どこ

  • echo 'ls *.csv' | sftp $server:$dir- $dirディレクトリのリモートSFTPでlsを実行します。
  • ${f%.csv}.txt- 変数$ fのcsvをtxtに置き換える
  • ${f##*/}- ファイルパス$ fからパスを削除する(もしあれば)

PS対話型パスワード入力を有効にする必要がある場合は、パラメータを追加してみ-o "BatchMode=no"てください。sftp

関連情報