2015-12-17 16 views
5

關於查找/刪除目錄中最舊的目錄/文件的stackoverflow有幾個不同的主題。我閱讀了很多,並且看到了很多不同的方式,這些方式對於其他系統中的某些人顯然有效,但在我的情況下不適用於我。通過Bash刪除除FreeBSD上最舊的目錄(no -printf,帶空格,無zsh)

約束條件是:

我得到的最接近的是這樣的東西(不完整):

find . -maxdepth 1 -d -name "Backup Set*" -print0 | xargs -0 stat -f "%m %N" | sort -r| awk 'NR>5' 

這給了我,我想刪除但他們現在已經時間戳前綴的目錄,這我不知道,如果我去掉和管RM我會回來的情況下,我不能刪除目錄與他們的空間。

輸出:

1450241540 ./Backup Set1 
1450241538 ./Backup Set0 

感謝這裏的任何幫助。


,我看了相關的帖子:

https://superuser.com/questions/552600/how-can-i-find-the-oldest-file-in-a-directory-tree

Bash scripting: Deleting the oldest directory

Delete all but the most recent X files in bash

+0

做了'統計輸出可以讓你輸入額外的dbl引號,例如'stat -f「%m \」%N \%「」'?好Q,祝你好運。 – shellter

回答

3
... | awk 'NR>5' | while read -r timestamp filename; do rm -rf "${filename}"; done 

當有比read指定的變量更多的領域,remaind呃簡單地集中在最後指定的變量中。在我們的例子中,我們提取時間戳,並按原樣使用其他所有文件名。我們遍歷輸出併爲每個條目運行一個rm

我會建議使用echo而不是rm進行測試運行,以便您可以先驗證結果。


或者,如果你願意的xargs -0版本:

... | awk 'NR>5' | while read -r timestamp filename; do printf "%s\0" "${filename}"; done | xargs -0 rm -rf 

這也採用了while read但顯示空字節分隔符可以通過xargs -0攝取的每個文件名。

+0

感謝你們,我嘗試了前者,它的工作原理 - 警告你必須從腳本運行它,我不能直接從命令行運行它,因爲我一直以這種方式測試我的命令。 – skimon

0

管道此剪切命令cut -d ' ' -f 2-將拿出時間戳

簡單的例子

echo '1450241538 ./Backup Set0'|cut -d ' ' -f 2- 

將擺脫時間戳的

結果將

./Backup Set0