【轉自】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。