1
我已經在這裏看到過有關Python和複製文件的問題,但我有不同的處理方案。遞歸複製具有進度的文件
我幾乎完成了我一直在努力的Linux發行版安裝程序,現在只需將文件複製到目標分區即可。由於大多數發行版安裝程序都有進度條,所以我希望能添加一個。
現在,我使用PyQt4的和我的代碼如下所示:
self.status('Counting files...')
self.count = int(check_output(['-c', 'find /opt/linux/work/root-image/ -type f | wc -l'], stderr = PIPE, shell = True))
self.status('Copying files...')
i = 0
for root, dirs, files in os.walk('/opt/linux/work/root-image/'):
for file in files:
i += 1
f = os.path.join(root, file)
try:
os.system('mkdir -p /tmp/foo' + os.path.split(f)[0])
except:
pass
os.system('cp ' + f + ' /tmp/foo' + f)
if i % 100 == 0:
self.emit(SIGNAL('progress(int)'), int(100.0 * float(i)/float(self.count)))
self.status('Done...')
這是因爲進度條的效率非常低。整個圖像是2.1GB
,並且需要很長時間才能將文件複製過來。 很多比簡單的cp -r
更長。
有沒有任何有效的方法來做到這一點?對於單文件複製進度條,您所做的只是一次讀取小塊,但我不知道如何爲具有91,489
文件的目錄執行此操作。
任何幫助將有所幫助。謝謝!
信號發射減慢了很多事情。但我會嘗試這些變化,也許這個過程真的放慢了速度。 – Blender 2011-05-23 08:25:18
如果你有91489個文件,並且你在每100個文件後發射一個信號,那麼這僅僅是914個信號發射 - 這應該不成問題。如果您在for循環中註釋掉'self.emit'部分並使用上面的''os.system''一個接一個地複製文件,速度會更快嗎? – 2011-05-23 08:27:47
我現在正在測試它。似乎卡在破損的符號鏈接上(如果根目錄是源代碼,則工作正常,但在主機系統上不起作用)。 – Blender 2011-05-23 08:32:03