1. ホーム
  2. python

Fabricを使って、ディレクトリをリモートマシンにコピーするにはどうしたらいいですか?

2023-08-03 06:36:17

質問

ローカルマシンにディレクトリがあり、Fabric を使ってリモートマシンにコピーしたい(そして名前を変えたい)のですが、どうすればいいですか?私は私が使用してファイルをコピーすることができることを知っている put() を使ってファイルをコピーできることは知っていますが、ディレクトリについてはどうでしょうか。私はそれが十分に簡単であることを知っている使用 scp を使えば簡単なのは知っていますが、私はそれを私の fabfile.py から行いたいのですが、可能でしょうか?

どのように解決するのですか?

この場合 put を使うこともできます(少なくとも 1.0.0 では)。

local_path は、相対的または絶対的なローカルファイルか ディレクトリパス を含むことができます。 シェル型ワイルドカード で理解されるように、Pythonの グロブ モジュールによって理解されます。チルダ展開(os.path.expanduserで実装)も実行されます。

参照してください。 http://docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put


更新: この例は 1.0.0 でうまく動きます。

from fabric.api import env
from fabric.operations import run, put

env.hosts = ['[email protected]']

def copy():
    # make sure the directory is there!
    run('mkdir -p /home/frodo/tmp')

    # our local 'testdirectory' - it may contain files or subdirectories ...
    put('testdirectory', '/home/frodo/tmp')

# [[email protected]] Executing task 'copy'
# [[email protected]] run: mkdir -p /home/frodo/tmp
# [[email protected]] put: testdirectory/HELLO -> \
#     /home/frodo/tmp/testdirectory/HELLO
# [[email protected]] put: testdirectory/WORLD -> \
#     /home/frodo/tmp/testdirectory/WORLD
# ...