2015-06-10 22 views
1

我想解密一堆非常大的文件,並使用每個文件的解密版本作爲處理其內容的Python腳本的輸入。所以,如果我有運行GnuPG的解密工具的輸出應存放在一個名爲Gnu並行 - 解密並將文件內容發送到Python腳本

file1.sc.xz 

同一目錄中的文件來命名

file1.sc.xz.gpg 

一個文件,這個文件應該是輸入將處理其內容的Python腳本。理想情況下,我希望在一個Bash命令中執行此操作,但我無法找到正確的方法來執行此操作。我試過的是:

find test/ -type f | parallel 'f="{}"; g="${f%.*}"; gpg "$f" > "$g" | python iterating-over-tokens.py "$g" ' 

但不起作用。還有其他建議嗎?提前謝謝了。

稍後編輯:如果我可以將解密後的文件(* .sc.xz)內容作爲參數直接發送到Python腳本,那會更好。

+0

請詳細說明「它不工作」。它拋出錯誤嗎?它在做什麼?它是什麼*不*做? –

+0

gpg工具並行運行,並且每次都告訴我一個擴展名爲* .sc.xz的文件名已經存在,並要求我手動確認是否覆蓋。既然它並行運行,我會在很短的時間內收到許多類似的消息,儘管這些文件似乎並不存在。我認爲我做錯了什麼.. – Crista23

+1

而不是保存到文件,並將該文件給Python腳本,您可能將解密的數據管道輸出到標準輸出,並在管道的另一側有Python讀取標準輸入。 – boardrider

回答

1

管道直接輸送到Python:

parallel gpg -o - {} '|' python -c "'import sys; print sys.stdin.read().upper()'" ::: *.gpg 

首先創建解密文件:

parallel gpg -o {.} {} ';' python -c "'import sys; print sys.argv'" {.} ::: *.gpg 

您需要能夠不輸入密碼短語來解密。如果gpg首先要求運行gpg-agent的密碼短語。

+0

感謝您的回覆。我試着直接將它作爲第一個參數發送到Python,作爲test/-type f |並行gpg -o - {}'|' python -c「iterating-over-tokens-example.py」::,但它給NameError:name'iterating'未定義。我做錯了什麼嗎? – Crista23

+0

如果我這樣稱呼它:find test/-type f |並行gpg -o - {}'|' python iterating-over-tokens-example.py ::,我的python腳本被調用,但它在腳本內投訴我試圖使用第一個參數Chunk(path = sys.argv [1]) - raise exc IOError:: :不存在,但mode ='rb'。所以我相信解密文件不會作爲參數發送。 – Crista23

+0

如果我嘗試運行第二個命令,首先創建解密文件,我得到的是另一個IO錯誤:['-c','*'] gpg:無法打開'* .gpg' – Crista23

相關問題