2014-06-29 91 views
0

嗨所以我想,如果文件數量超過最大從一個子目錄刪除舊的備份文件,我發現這個命令來做到這一點在子目錄刪除文件

ls -t | sed -e '1,10d' | xargs -d '\n' rm 

我的改變是因爲顯然如下

ls -t subdirectory | sed -e '1,$f' | xargs -d '\n' rm 

當我嘗試運行腳本它給了我一個錯誤說未知命令:現在˚F

我唯一擔心的是,我路過在允許的最大文件數量作爲參數,所以我將它存儲在f中,但現在我不太清楚如何在上面的命令中使用該變量,而不必將條件設置爲特定的數字。

誰能給我任何指針?還有什麼我做錯了嗎?

謝謝!

回答

2

問題標題顯示「基於修改日期」。那麼爲什麼不簡單地使用mtime選項來查找?

find subdirectory -mtime +5d -exec rm -v {} \; 

將刪除所有超過5天的文件。

+0

或'-delete'而不是'-exec rm -v {} \;' –

+0

如果我只想在達到最大文件數時刪除最舊的文件,那麼我在目錄中添加一個文件時該怎麼辦?對不起,我沒有把問題說得很清楚 – Mark

0

的問題是,要傳遞到xargs文件列表不包含所需的路徑信息刪除該文件。從當前目錄調用時,不需要路徑,但是如果用子目錄調用它,則需要從當前目錄中調用subdirectory/file。試試看:

ls -t subdirectory # returns files with no path info 

你需要做的是改變子目錄,調用刪除腳本,再改回來。

pushd subdirectory &>/dev/null; ls -t | sed -e '1,$f' | xargs -d '\n' rm; popd 

比以同樣的方式做其他的,你可能會更好寫一個稍長和更靈活的腳本與find命令,以保證路形成的文件列表:在一個線就可以用做信息被保留。