我認爲cron
使用/bin/sh
來執行命令。 sh
通常是bash
的子集,並且您沒有做任何特定的bash。
執行rm
命令只有在cd
命令成功:
0 * * * * cd home/docs/reports/ && rm -r *
注意請稍等幾分鐘,而我對此進行測試。如果這個筆記消失了,我已經嘗試過了,它可以工作。
是的,它的工作原理。 (注意:測試目錄是否存在是不可靠的,它有可能是目錄存在,但你不能cd
到它,或者它可能停止試驗和cd
命令之間存在。)
但實際上你不「噸需要使用這樣的化合物的命令:
0 * * * * rm -r home/docs/reports/*
仍然&&
特技,以及相應的||
操作者執行的第二命令僅當第一個失敗,可以是更復雜的操作是非常有用。
雖然這個工作確定,當我試了一下,在您自己的風險使用它(難道你的意思是/home/docs
而非home/docs
?後者將相對於你的home目錄解釋。)。無論何時您將rm -r
與通配符組合在一起,都存在風險。如果可能的話,在一個你確定不關心的目錄中進行測試。如果你想盡可能確保所有東西都被刪除,你可以考慮使用rm -rf
。最後,請記住*
通配符與名稱以.
開頭的文件或目錄不匹配。
#include <stddisclaimer.h>
編輯:
的意見給了我一個更好的瞭解你想要做什麼。這些文件是用戶在創建後立即下載的文件(對嗎?),因此您不想刪除比5分鐘之前更短的文件。
假設你有GNU的findutils,你可以做這樣的事情:
0 * * * * find /home/docs/reports/* -cmin +5 -delete 2>/dev/null
使用-delete
選項find
意味着你一次刪除文件和/或目錄的,而不是刪除整個子樹;主要區別在於不會刪除其中包含新文件的舊目錄。將-delete
應用於非空目錄將失敗並顯示錯誤消息。
有關-cmin
和-delete
選項的更多信息,請閱讀GNU查找文檔(info find
)。請注意,-ctime
在文件的最後一次狀態更改時刻運行,其而不是其創建時間(Unix不記錄文件創建時間)。對於你的情況,它可能是相同的。
(如果你的道路上忽略/*
,它會刪除reports
目錄本身。)
不知道爲什麼你需要'cd'來執行命令的目錄 - 只需指定完整的路徑。 – Soren 2012-03-27 22:25:52