2

指定したフォルダへの Cisco デバイスのバックアップを自動化するスクリプトを作成しました。/home/myusername/バックアップ

私が達成したいのは、スクリプトを週に 1 回実行し、出力を Backups フォルダーにダンプすることですが、それらを上書きする代わりに、古い構成を別のディレクトリに保存することです。可能であれば、1 か月分のバックアップを保持したいと考えています。スクリプトが実行され、新しい出力が書き込まれると、以前のコピーはファイル ツリーの下に移動します。ファイル ツリーは次のようになります。

/Backups(newest backup)
--1_Week_Old
--2_Weeks_Old 
--3_Weeks_Old
--4_Weeks_Old

これは私が書いた既存のスクリプトの例です。うまく機能しますが、経験を積めば短縮できることはわかっています。私はスクリプトを書くのが初めてなので、簡単に....

#!/usr/bin/expect

set timeout 20

# These are all the IP's:
set ip1 "X.X.X.X"

#These are all the hostnames:
set hostname1 "ASA_Firewall"

#These are the usernames
set username   "RickyBobby"

# These are all the passwords:
set password         "xxxxxxx"
set enableasa        "xxxxxxxxx"

#This is the ASA Firewall - Point TFTP Directory to C:\cygwin\home\RickyBobby\Backups
spawn ssh $ip1
expect "password:"
send "$password\r"

  expect ">" {
    send "en\n"
    expect "Password:"
    send "$enableasa\r"
  }
expect "#"
send "copy run tftp://X.X.X.X/Backups/$hostname1-confg\r"
expect "Source filename?"
send "\r"
expect "Address or name of remote host?"
send "X.X.X.X\r"
expect "Destination filename?"
send "\r"
expect "#"
send "exit\r"

私はまだ学習過程にあるので、どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

これを行うには、一連のディレクトリ名変更コマンドを使用します。「第 4 週」ディレクトリにあるものを削除しても問題ないと仮定します。

cd /home/username/Backups
file delete -force ./4_Weeks_Old
file rename 3_Weeks_Old 4_Weeks_Old
file rename 2_Weeks_Old 3_Weeks_Old
file rename 1_Week_Old  2_Weeks_Old 

# move files in Backups to 1 week dir
file mkdir 1_Week_Old
file rename -- {*}[glob -types f -- *] 1_Week_Old

お使いのバージョンの expect にバージョン 8.5 より古い Tcl が含まれている場合は、ファイルを移動する必要があります。

for file [glob -types f -- *] {
    file rename $f 1_Week_Old/$f
}

または醜い

set cmd [linsert [glob -types f -- *] 0 file rename --]
eval [lappend cmd 1_Week_Old]

--ファイル名がオプションではなくファイル名として扱われるように、ダッシュで始まるファイル名がある場合に使用します。

あなたの期待スクリプトはよさそうです。1 つのヒント: 期待するスクリプトを作成するときは、"expect -d" を指定して実行するか、次の行を最初の近くに追加します: exp_internal 1-- これにより、詳細なデバッグ出力がオンになり、パターンがどのように一致しているかを確認できます。

于 2013-10-16T01:36:59.020 に答える