2016-06-22 18 views
0

文件夾結構是這樣的:如何刪除的zip文件,除了過去的幾年,在多個文件夾層次

Main_Folder: 
      A 
      --> File1.zip 
      --> File2.zip 
      A11 
       --> File3.zip 
       --> File4.zip 
      A12 
       --> File5.zip 
       --> File6.zip 
      B 
      C 

與之相似,這一點,分別爲B11,B12 & C,C11,C12保持相同的B中。 我想從Main_Folder路徑執行命令,以便遍歷所有內部文件夾並刪除除最後幾個zip文件之外的所有zip文件。 你能幫我解決這個問題嗎?

我試圖

find $PWD -printf "%TY-%Tm-%Td %TT %p\n" | sort -n | grep "zip" | head -n -5| xargs rm -rf 

但這保持最新的文件整體,而不是按文件夾。

+0

你最好考慮寫一個bash腳本來遍歷所有的目錄。一個班輪將是複雜的。檢查http://www.cyberciti.biz/faq/bash-loop-over-file/ –

回答

0

你通常會選擇一些你想要的時間。

# DANGEROUS!!! 
$ find PATH -mtime +2 -name "*.zip" -delete 

但是你不會確定有足夠的文件保存。例如如果您的備份在2天前停止,您可以刪除最後一次備份。

首先檢查您是否有足夠的備份是很好的。例如

existing=`find PATH -mtime -2 | wc -l` 
if ((existing > 5)); then 
    find ... -delete 
fi 

運行前請仔細測試代碼。我沒有檢查上面代碼片段的語法和計算。命令重新運行危險。使用常識。

HTH

現在我看到你想要刪除文件夾。然後你可以搜索-mtime ... -type d並使用上面的邏輯。但-delete insted你會使用類似-exec rm -rf \{\} \;這是更危險的。

或者你可以得到一個文件夾列表,然後刪除它們上的zip文件。這真的取決於具體的用例。

+0

目前,我遵循相同的方法。從單獨的文件讀取路徑,然後檢查計數,然後刪除文件。但路徑文件不斷增加。你會如何優化它? – User

+0

@User,如果您使用該方法按修改時間列出目錄而不是單個文件(我還建議使用'-maxdepth'選項來避免匹配子目錄),那麼您可以使用'rm -rf'來刪除整個目錄。 或者,你可以有一個單獨的進程來檢查目錄,並在腳本刪除zip文件後刪除空的。但是這聽起來對我來說不太可靠。您不應該在目錄中存儲任何其他文件,只要您希望它們在某些時候消失。 – akostadinov

相關問題