1. 程式人生 > >Linux 反向刪除檔案(排除特定檔案)

Linux 反向刪除檔案(排除特定檔案)

前言

因為測試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

參考