Linux 反向刪除檔案(排除特定檔案)
阿新 • • 發佈:2019-01-30
前言
因為測試web工程的時候,改改配置什麼的,需要重啟應用。
強迫症的我,每次重啟都要清空下日誌什麼的。想寫個shell指令碼,依次達到如下效果:
1. 停止tomcat 服務;
2. 清空logs資料夾下的日誌;
3. 清空webapps資料夾下自動解壓的檔案,但偶爾不想刪除war包;
4. 重新啟動tomcat服務;
5. 屏顯下catalina.out裡面日誌;
第3點裡面就有個反向刪除的需求。
“反向刪除”初探
常用的刪除命令是rm,但這貨不能自己搞定“反向刪除”這事。
基本思路:先讓grep反向查詢,然後刪除查找出來的檔案&資料夾。
按照這個想法,基本可以用find和ls + grep搞定:
命令組合 | 具體命令列 |
---|---|
rm + ls + grep | rm -rf `ls ./webapps/ | grep **.war` |
rm + find + grep | rm -rf `find ./webapps/ -maxdepth 1 -mindepth 1 | grep -vE *.war` |
說明:“`”這個符號,是標準鍵盤上“1”的左邊那個鍵,成對出現,前後各一。
比較
注:只針對這個該應用場景:
ls | find |
---|---|
在非當前目錄(webapps/)執行,達不到刪除效果 | 要注意過濾掉目標目錄(webapps/) |
最終指令碼
#!/bin/sh
set -x
./bin/catalina.sh stop
rm -rf ./logs/*
rm -rf `find ./webapps/ -maxdepth 1 -mindepth 1 | grep -vE *.war`
./bin/catalina.sh start
tail -f 5 ./logs/catalina.out