3

あまりにも単純な質問で申し訳ありません。しかし、私は Java 開発者であり、シェル スクリプトの知識はありません。私はグーグルで検索しましたが、探しているものを正確に見つけることができませんでした。

私の要件

  1. Sftp [pub/pri キーに基づく認証] を使用してリモート サーバーに接続します。秘密鍵ファイルを指す変数
  2. 特定の拡張子 [.log] を持つファイルをローカル サーバー フォルダーに転送します。リモート サーバー パスとローカル フォルダーを設定する変数
  3. リモートサーバーで転送されたファイルの名前を変更します
  4. 転送されたすべてのファイルを .txt ファイルに記録します

このためのシェルスクリプトを教えてもらえますか?

これまでのところ、私は提案から組み立てました。まだ私の側にいくつかの質問が残っています;)

export PRIVKEY=${private_key_path}
export RMTHOST=user@remotehost
export RMTDIR=/logs/*.log
export LOCDIR=/downloaded/logs/
export LOG=sucess.txt

scp -i $PRIVKEY $RMTHOST:$RMTDIR $LOCDIR
for i in 'ls -1 $LOCDIR/*.log'
do
   echo $i >> $LOG
done

ssh $RMTHOST -c "for i in `ls -1 $RMTDIR; do mv /logs/$i /logs/$i.transferred; done"
4

2 に答える 2

4

このアプローチはどうですか?

  1. Sftp [pub/pri キーに基づく認証] を使用してリモート サーバーに接続します。秘密鍵ファイルを指す変数
  2. 特定の拡張子 [.log] を持つファイルをローカル サーバー フォルダーに転送します。リモート サーバー パスとローカル フォルダーを設定する変数
scp your_user@server:/dir/of/file/*.log /your/local/dir
  1. 転送されたすべてのファイルを .txt ファイルに記録します
for file in /your/local/dir/*.log
do
   echo "$file" >> $your_txt
done
  1. リモートサーバーで転送されたファイルの名前を変更します
ssh your_user@server -c "for file in /dir/of/file/*.log; do mv /dir/of/file/"$file" /dir/of/file/new_name_based_on"$file"; done"
于 2013-03-08T10:05:13.343 に答える
1

scp(secure copy) コマンドを使用してファイルを転送します。ファイルを圧縮する -C スイッチを追加することもできます。それは物事を少しスピードアップすることができます. つまり、file1 を server1 から server2 にコピーします。

server1:

#!/ビン/sh
scp -C /home/user/file1 root@server2.com:/home/user

編集:

#!/ビン/sh
scp -i {path/to/pub/pri/key/file} /home/user/file1 root@server2.com:/home/user
于 2013-03-08T10:00:33.550 に答える