2

ハイフン ("-") を含むファイルをサーバーに配置する際に問題が発生しました。これは、Linux でのファイルの処理方法が原因である可能性があると思いますが、確信が持てません。スクリプトは、写真/アイテムのフォルダーをスキャンし、それらをリストに入れ、すべてのアイテムをサーバーに転送します。

これはスクリプトの一部です:

def _transferContent(locale):
    ## Transferring images to server
    now = datetime.datetime.now()
    localImages = '/home/bcns/Pictures/upload/'
    localList = os.listdir(localImages)
    print("Found local items: ")
    print(localList)
    fname = "/tmp/backup_images_file_list"
    f = open(fname, 'r')
    remoteList = f.read()
    remoteImageLocation = "/var/www/bcns-site/pics/photos/backup_" + locale + "-" + `now.year` + `now.month` + `now.day` + "/"
    print("Server image location: " + remoteImageLocation)
    ## Checking local list against remote list (from the server)
    for localItem in localList:
        localItem_fullpath = localImages + localItem
        if os.path.exists(localItem_fullpath):
            if localItem in remoteList:
                print("Already exists: " + localItem)
            else:
                put(localItem_fullpath, remoteImageLocation)
        else:
            print("File not found: " + localItem)

そして、これはアウトプットです:

Directory created successfully
/tmp/bcns_deploy/backup_images_file_list
[<server>] download: /tmp/backup_images_file_list <- /tmp/bcns_deploy/backup_images_file_list

Warning: Local file /tmp/backup_images_file_list already exists and is being overwritten.

Found local items: 
['darth-vader-mug.jpg', 'gun-dog-leash.jpg', 'think-safety-first-sign.jpg', 'hzmp.jpg', 'cy-happ-short-arms.gif', 'Hogwarts-Crest-Pumpkin.jpg']
Server image location: /var/www/bcns-site/pics/photos/backup_fujitsu-20131031/
[<server>] put: /home/bcns/Pictures/upload/darth-vader-mug.jpg -> /var/www/bcns-site/pics/photos/backup_fujitsu-20131031/

Fatal error: put() encountered an exception while uploading '/home/bcns/Pictures/upload/darth-vader-mug.jpg'

Underlying exception:
    Failure

ハイフォンを削除しようとしましたが、転送は問題なく機能します。

サーバーは Ubuntu 12.04 を実行し、クライアントは ext3 ディスクで Debian 7.1 を実行します。

いらいらするエラーですが、このエラーの原因について手がかりを持っている人はいますか?

4

1 に答える 1

0

Linux のコマンド ライン オプションのダッシュは重要ですが、ファイル名の途中のダッシュはファイルです。

ファイルのアクセス許可を確認してください。1 つのファイルを手動で転送する場合、Fabric で転送する場合とは異なるアクセス許可が設定されている可能性があります。

一度にディレクトリput()を転送するために使用することをお勧めします。これにより、すべてのファイル (およびアクセス許可) が適切であることを確認できます。

例 (未テスト):

def _transferContent(locale):
    ## Transferring images to server
    now = datetime.datetime.now()
    localImageDir = '/home/bcns/Pictures/upload/'
    remoteImageDir = "/var/www/bcns-site/pics/photos/backup_" + locale + "-" + `now.year` + `now.month` + `now.day` + "/"
    print("Server image location: " + remoteImageDir)
    put( localImagesDir, remoteImageDir)
于 2014-05-27T17:45:18.080 に答える