2016-05-23 6 views
1

私は、特定のパスの後にあるすべてのファイルを暗号化する小さなスクリプトをプログラミングしています。私の場合、スクリプトrealpath ... は最初のフォルダ(スクリプトディレクトリ)にはうまくいきますが、次のディレクトリに移動すると、2番目のディレクトリ階層にあるファイルにcdしようとします。 ツリーは[ファイル、ファイル、フォルダ[ファイル、ファイル]、ファイル、ファイル]のように見えます。すべてのディレクトリのファイルを取得する(Py)

(私も知っていますが、スクリプトとキーも暗号化されますが、私はまだそれを怠けていました。 ...と私の下手な英語のため申し訳ありませんが、私はあなたが私を理解することを願って:P)

マイコード:

import os 
import Crypto 
from Crypto.PublicKey import RSA 

def cryptFilesInFolder(currentDir): 
    content_list = os.listdir(currentDir) 
    print content_list 
    print '[+] Start encrypting files in Dir: ' + currentDir 
    for filename in content_list: 
     print '[+] Encrypting ' + filename 
     crypt(filename, key, currentDir) 

def crypt(filename, key, currentDir): 
    try: 
     f = open(filename, 'r') 
     fileString = f.read() 
     f.close() 
     print '[+] Encrypting file: ' + filename + ' with 4096 bytes' 
     encryptedFileString = key.publickey().encrypt(fileString, 4096) 
     f = open (filename, 'w') 
     f.write(str(encryptedFileString)) #write ciphertext to file 
     f.close() 
    except IOError: 
     print '[!] File was a folder' 
     cryptFilesInFolder(currentDir + '/' + filename) 

print '[+] Startet Crypting' 
print '[+] Reading Key' 
f = open('mykey.pem','r') 
key = RSA.importKey(f.read()) 
f.close() 
print '[+] Key imported' 
print '[+] Setting Root Directory' 
rootDir = os.path.realpath(__file__) 
print 'Root Directory set' 
print '[+] Starting encryption in folder: ' 
cryptFilesInFolder(os.path.dirname(os.path.realpath(__file__))) 
print '[+] Finished \n\n\n' 

エラーメッセージ:

Bjarne-2:crypt bjarne$ python crypt\ folder\ Kopie.py 
[+] Startet Crypting 
[+] Reading Key 
[+] Key imported 
[+] Setting Root Directory 
Root Directory set 
[+] Starting encryption in folder: 
['.DS_Store', 'crypt folder Kopie.py', 'myKey.pem', 'Neuer Ordner'] 
[+] Start encrypting files in Dir: /Users/bjarne/Desktop/crypt 
[+] Encrypting .DS_Store 
[+] Encrypting file: .DS_Store with 4096 bytes 
[+] Encrypting crypt folder Kopie.py 
[+] Encrypting file: crypt folder Kopie.py with 4096 bytes 
[+] Encrypting myKey.pem 
[+] Encrypting file: myKey.pem with 4096 bytes 
[+] Encrypting Neuer Ordner 
[!] File was a folder 
['.DS_Store', 'key Kopie.py'] 
[+] Start encrypting files in Dir: /Users/bjarne/Desktop/crypt/Neuer Ordner 
[+] Encrypting .DS_Store 
[+] Encrypting file: .DS_Store with 4096 bytes 
[+] Encrypting key Kopie.py 
[!] File was a folder 
Traceback (most recent call last): 
    File "crypt folder Kopie.py", line 37, in <module> 

    File "crypt folder Kopie.py", line 11, in cryptFilesInFolder 

    File "crypt folder Kopie.py", line 25, in crypt 

    File "crypt folder Kopie.py", line 11, in cryptFilesInFolder 

    File "crypt folder Kopie.py", line 25, in crypt 

    File "crypt folder Kopie.py", line 6, in cryptFilesInFolder 

OSError: [Errno 20] Not a directory: '/Users/bjarne/Desktop/crypt/Neuer Ordner/key Kopie.py' 

答えて

4

あなたがしようとしているようです走るそのフォルダの(再帰的な)サブフォルダ内のファイルを含む、フォルダ内のすべてのファイルに関する特定のコマンド。

この場合、os.walkを使用して、指定されたディレクトリを再帰的にトラバースし、(current directory, directories, files)のタプルを生成します。

import os 
for (root, dirs, files) in os.walk(rootDir): 
    # In each iteration, files will contain the list of files in the directory, 
    # where directories are traversed recursively. 
    map(lambda f: crypt(f, key, root), files) 

map機能は、単に各項目にcryptcrypt周りよく、ラッパー)を印加します。

map(lambda f: crypt(f, key, root), files)は、機能的に同等である:

for f in files: 
    crypt(f, key, root) 
関連する問題