記一次linux刪除當前文件夾下的某一類文件或者文件夾

【轉自】https://blog.csdn.net/with__sunshine/article/details/96352496

發現日誌文件夾下面產生了很多無效的文件夾(docker啓動項目失敗後一直重試。。。。。),直接導致使用ls命令查看文件夾內容時,屏幕卡住了。。。。

首先使用了命令ls -l > /root/find_manager_folder_name.txt 將當前文件夾下的所有文件的名稱輸出到/root/find_manager_folder_name.txt,然後查看發現,文件竟然有5M多,裏面包含了18w個文件夾,我丟。。。。。這就有點秀了。。。。。
在這裏插入圖片描述

如果能直接刪除當前文件夾還好,爲了防止刪除正常的日誌,於是想着刪除其他無效的文件夾得了,將今天的正常的日誌文件夾保留。

也就是博客題目提到的:刪除當前某些文件夾

爲了保險起見,我們要大致瞭解,我們需要刪除的文件夾跟我們要保留的文件夾的區別,這樣才能只刪除該刪除的。

首先還是先將所有的文件夾輸出到文件中,這樣方便我們篩選,我這裏是將文件輸出到/root目錄下了。

接下來就是查找+刪除

linux下剛好有這樣的功能:find folderPath -option [-print] [-exec -ok command] {} \;

刪除當前目錄及其子目錄下的所有xml文件: find . -type f -name '*.xml' -exec rm -rf {} \;

刪除某個目錄下及其子目錄下的所有的.svn 文件夾: find /test/subtest -type d -name '.svn' -exec rm -rf {} \;

由於我這裏文件夾命名方式是用時間來命名的,所以我首先嚐試刪除某一天的文件夾:

find /data/appslogs/manager -type d -name '2019-11-29*' -exec rm -rf {} \;
[root@docker_3_187 manager]# find /data/appslogs/manager -type d -name '2019-11-29*' -exec rm -rf {} \;
find:/data/appslogs/manager/2019-11-29_10:54:04_10.0.0.51: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:52:13_10.0.0.39: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:52:55_10.0.0.43: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:50:24_10.0.0.31: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:51:50_10.0.0.37: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:53:47_10.0.0.49: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:52:34_10.0.0.41: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:51:24_10.0.0.34: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:53:29_10.0.0.47: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:47:53_10.0.0.15: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:49:54_10.0.0.29: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:54:22_10.0.0.54: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:50:55_10.0.0.33: 沒有那個文件或目錄
find:/data/appslogs/manager/2019-11-29_10:53:13_10.0.0.45: 沒有那個文件或目錄
[root@docker_3_187 manager]# 

然後將剩餘文件輸出:ls -1 > /root/find_manager_folder_name_del_2019_11-29.txt

查看發現當前文件夾下確實沒有2019-11-29當天的文件夾了。

接着就是直接刪除2019-12開頭的文件夾:find /data/appslogs/manager -type d -name '2019-12*' -exec rm -rf {} \;

由於文件夾過多,導致屏幕一直在輸出find: ‘/data/appslogs/manager/2019-12.。。’: 沒有那個文件或目錄

我想在屏幕輸出這些信息的時候,刪除操作應該已經執行了,但是不知道怎麼將這個輸出給屏蔽掉,又擔心ctrl+c給當前刪除操作也給停掉了,只好等着屏幕自己跑完了。
在這裏插入圖片描述
最後使用ls查看,發現刪除後只剩餘了保留的文件夾,完美收官!

最後補充: Linux中find常見用法示例

find path -option [ -print ] [ -exec -ok command ] {} \;

#-print 將查找到的文件輸出到標準輸出

#-exec command {} ; —–將查到的文件執行command操作,{} 和 ;之間有空格,{} 表示find到的結果,最後有反斜槓\ 和 分號 ; 表示命令結束

#-ok 和-exec相同,只不過在操作前要詢用戶

#find 根據下列規則判斷 path 和 expression(命令選項參數 -option),在命令列上第一個 – ( ) , ! 之前的部份爲 path,之後的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 爲預設 expression。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章