2016-02-16 25 views
0

以下是我需要創建bash腳本的高級場景。Bash腳本 - 需要從目錄中刪除文件,直到目錄大小小於8 TB

  • 服務器- /sasdata2/SAS-USERS/PBU/
  • 如果大小超過8 TB以上目錄的大小不應該超過8 TB
  • ,需要刪除最早的文件通過「創建上的目錄/修改'日期以將大小減小到8TB。
  • 這個主目錄中有幾個子目錄,但沒有東西應該從子目錄中刪除。只有主目錄中的文件可以被刪除。

下面是我正在使用的腳本,但它在while語句中處於無限循環。在爲上述場景製作腳本時需要您的幫助。

while [ "$(du -shb /sasdata2/SAS-USERS/PBU | awk '{print $1}')" -gt 900 ] 
do 
    find /sasdata2/SAS-USERS/PBU -maxdepth 0 -type f -printf '%[email protected]\t%p\n' | \ 
    sort -n | head -n 25 | cut -d $'\t' -f 2- | xargs -d '\n' rm -f 
done 
+2

如果我們不允許觸及的子目錄大於8TB,那麼循環無法完成。 – tripleee

+0

爲什麼它需要是Bash?與Perl或Python相反呢? –

+0

你有沒有想過可能壓縮一些用戶的文件,而不是隨意刪除它們?順便說一句,因爲你的腳本中不良SAS用戶文件的路徑不止一次出現,所以你應該考慮把它放在一個變量中。 –

回答

1

我認爲你的條件是錯誤的。杜-B會給你字節,爲什麼比較900?

除此之外,爲什麼你需要一個du循環並刪除任意25個文件?用du計算你有多少字節超過8TB,然後用ls -ltr和循環刪除文件並總計它們的大小,直到達到超過字節爲止

+0

嗨伊蘭,我在一個文件夾上測試它,並刪除大於900字節的文件。我會嘗試這種方法,並讓你知道它是如何發生的。謝謝你的幫助。 –

相關問題