2012-01-09 41 views
0

使用mdfind()腳本收集文件列表後,我現在需要複製找到的每個文件,併爲以後存儲其原始路徑。實質上,我必須將龐大而分佈廣泛的舊AppleWorks文件移動到新捲上,手動更新它們,然後用相同位置和相同文件名(但不包含)的新版本更新原始文件擴展名或文檔類型)。因爲我是AppleScript的新手,我正在使用Python進行文件操作,並且只使用AppleScript來查找文檔(因爲文件擴展名不足以滿足我的目的,我需要通過mdfind查看Apple元標記)。AppleScript:字符串和文件Manpiulation

但是我可以用我的AppleScript產生的文檔 - 一個文件路徑列表 - 使用蘋果「\ r」新行分隔符,因此我不能輕易地將它導入python。

我的蘋果腳本:

set the_script to "mdfind kMDItemKind=='*AppleWorks*'" 
set the_text to (do shell script the_script) 
set the_doc to (choose file) 
write the_text to the_doc 

將會產生與各種可愛的路徑名的.txt文件,但蟒蛇把它讀成一個巨大的字符串。

怎麼做,我不是

一)告訴蘋果腳本自定義分隔符追加到每行(即「\ n」)

二)我怎麼知道蘋果腳本將每個找到的文件複製到一個新位置,同時保留原始文件並記錄其路徑?

任何幫助將不勝感激。

UPDATE @Kindall

當我嘗試管道在mdfind命令這是錯誤的Python拋出:

File "<stdin>", line 1, in <module> 
File  "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 679, in __init__ 
errread, errwrite) 
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1228, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

任何想法?我主要是一個網絡開發人員,試圖通過其他語言來指出我的方式,以避免通過我的老闆古代mac筆記本電腦上的2-3k文件進行手動排序,哈哈(和我糾正了原始代碼中的印刷錯誤,我沒有試圖逐字運行)。

+0

嘗試使用'-e' – fireshadow52 2012-01-09 17:29:16

回答

0

運用Kindall,我自己的意見,並在我的實驗室放在一起與蘋果工作得很好,但是使用完全蟒蛇解決一些人,具體如下:

import os 
import subprocess 

outfile = os.open("test",os.O_CREAT) 
os.close(outfile) 
outfile = os.open("test",os.O_RDWR) 
command = ["mdfind","kMDItemKind == '*AppleWorks*'"] 
subpipe = subprocess.Popen(command, stdout=outfile) 

從目錄中生成一個文本文件腳本運行。感謝各種建議。

2

(c)如何在使用Python讀取文件後在'\ r'中分割文件的內容? (d)如何:在Python中執行mdfind?(

+0

分隔線條Python無法識別Apple的「\ r」分隔符,唉。 – Jonline 2012-01-09 18:21:34

+0

實際上,Python應該 - 我假設蘋果公司發佈的Python解釋器是用通用的新行支持編譯的,在這種情況下,字符串上的一個簡單的'.splitlines()'應該可以做到。 – kindall 2012-01-09 18:27:12

+0

你不能僅僅在一個恰好是'\ r'的字符上顯式地分割一個字符串嗎? – 2012-01-09 20:29:40

2

(d)如何:在Python中執行mdfind

import subprocess 

command = "mdfind kMDItemKind=='*AppleWorks*'" 
subpipe = subprocess.Popen(command, stdout=subprocess.PIPE) 
outlist = subpipe.communicate()[0].splitlines() 

for filename in outlist: 
    print filename # or whatever 

注:我並不是一個真正的Mac上的時刻,但這個工作確定爲我與Windows和dir C:\ comamand,所以它應該在Mac上很好地工作mdfind

+0

好吧,我立即喜歡這個解決方案 - 我不是真的都對AppleScript感興趣,但是python會拋出一個錯誤。我已經將代碼作爲對最初問題的編輯,參見上文(並感謝您的輸入)。 – Jonline 2012-01-09 18:29:31