2013-07-24 116 views

回答

2

使用發現只有保持X最新文件:

find /path/to/dir ! -newer $(ls -t | sed 'x!d') -exec rm {} \; 
1

目錄試試這個:

cd /path/to/dir && { (ls -t|head -n 5;ls)|sort|uniq -u|xargs rm; } 

在非現有目錄的情況下,它不會做任何事情。

+0

我想通過一個腳本來做到這一點。我有一個問題,如果我使用你的建議,腳本現在假設它生活在/ path/to/dir中? 。 – highriser

+0

@highriser:不,您可以將此行保存到腳本中並將腳本放在其他位置。然後從path-to-dir作爲參數調用腳本。請注意,在這種情況下,您需要修改這樣的行:'cd「$ 1」&& {(ls -t | head -n 5; ls)| sort | uniq -u | xargs rm; }如果你真的希望腳本考慮到這個參數。您也可以首先檢查是否提供了「$ 1」。 – Bentoy13

2

爲您的原始線我建議您可以反轉排序並使用頭排除最後一行。它然後變成:

ls -drt ~/somedir/* | head -n-5 | xargs rm 

我會鼓勵你調查這樣的問題的查找命令。你獲得更多的控制,你可以處理之類的東西的關係(例如,刪除舊文件,比第五古老)

有喜歡懸而未決的細節:

  • 我假設你想排除在timechecks子目錄
  • 我還從使用ls猜你要非遞歸
  • 不知道你想要做的有關文件隱藏

你的想法是什麼。爲找到人網頁有例子,但類似:

DIR=cdplatform && find $DIR -maxdepth 1 -type f ! -newer $(ls -Fdrt ${DIR}/* | grep -v "/$" | head -n-4 | tail -1) -exec rm {} \; 
相關問題