刪除CVS目錄到目前爲止,我想出了這一點:腳本遞歸服務器上
find . -name 'CVS' -type d -exec rm -rf {} \;
它是迄今爲止當地工作,任何人都可以看到任何潛在的問題?我希望這基本上遞歸刪除'CVS'目錄意外上傳到服務器。
另外,我怎樣才能使它成爲一個腳本,我可以指定一個目錄來清理?
刪除CVS目錄到目前爲止,我想出了這一點:腳本遞歸服務器上
find . -name 'CVS' -type d -exec rm -rf {} \;
它是迄今爲止當地工作,任何人都可以看到任何潛在的問題?我希望這基本上遞歸刪除'CVS'目錄意外上傳到服務器。
另外,我怎樣才能使它成爲一個腳本,我可以指定一個目錄來清理?
嗯,很明顯的一點:它會刪除名爲CVS的目錄,不管他們是CVS目錄與否。
你可以把它變成一個腳本很容易:
#!/bin/sh
if [ -z "$1" ]; then
echo "Usage: $0 path"
exit 1
fi
find "$1" -name 'CVS' -type d -print0 | xargs -0 rm -Rf
# or find … -exec like you have, if you can't use -print0/xargs -0
# print0/xargs will be slightly faster.
# or find … -exec rm -Rf '{}' + if you have reasonably modern find
如果你想讓它更安全/多防呆,你可以在第一,如果後做這樣的事情/ Fi塊(有幾種方式來寫這個):
⋮
case "$1" in
/srv/www* | /home)
true
;;
*)
echo "Sorry, can only clean from /srv/www and /home"
exit 1
;;
esac
⋮
你可以把它作爲看上你想要的(例如,而不是放棄,很可能促使如果你真的打算這樣做)。或者你可以讓它解決相對路徑,所以你不必總是指定一個完整的路徑(但是,然後再次,也許你想這樣做,更安全)。
像這樣使用xargs的主要擔憂是,如果有足夠的匹配目錄,則可能會溢出傳遞給「rm -Rf」的命令行的大小。由「-s」的默認值提供的限制應該防止xargs這樣做,我仍然在一些平臺上遇到它;該檢查在任何地方似乎都不可靠。爲了避免這裏出現任何問題,我總是使用「-n 1」作爲xargs的參數,所以我得到了處理所有管道輸入的好處,沒有溢出問題。那時你可能會使用exec,因爲你所瞄準的效率增益消失了。 –
有趣。這個腳本無法使用rm -rf /因爲這個名字必須是'CVS',對吧?只是想確定,嘿。 –
@meder:正確,由於'-name',它不能'rm -Rf /'。當然,它可以愉快地移除坐在'/ srv/CVS'中的CVS倉庫。您可能希望添加進一步的測試以使其更安全。 – derobert