欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux實(shí)現(xiàn)徹底清理空文件夾的方法詳解

 更新時(shí)間:2022年10月24日 14:09:43   作者:農(nóng)民工老王  
這篇文章主要介紹了Linux實(shí)現(xiàn)徹底刪除指定路徑下的所有空文件夾。這里的空文件夾的認(rèn)定標(biāo)準(zhǔn)是:如果某個(gè)文件夾的子文件夾全是空文件夾,也認(rèn)為該文件夾是空文件夾,需要的可以參考一下

最近工作中遇到一個(gè)需求——刪除指定路徑下的所有空文件夾。這里的空文件夾的認(rèn)定標(biāo)準(zhǔn)是:如果某個(gè)文件夾的子文件夾全是空文件夾,也認(rèn)為該文件夾是空文件夾。

代碼

以下是我實(shí)現(xiàn)的shell腳本,自測(cè)沒(méi)有發(fā)現(xiàn)異常。

#!/bin/bash
delete_empty_dirs_once(){
  local dirPath=$1

  if [ ! -d "${dirPath}" ]; then
      echo  "文件夾不存在:${dirPath}"
      return 0
  fi

  local lsStrInDEDO=$(ls -a "${dirPath}")
  local arrayInDEDO=(${lsStrInDEDO})

  if [  ${#arrayInDEDO[@]} -le 2 ]; then
      rm -rf "${dirPath}"
      echo "刪除空文件夾:${dirPath}"
      echo "${dirPath}" >>empty_dirs.txt
      emptyDirNumForOnce=$(($emptyDirNumForOnce+1))
      emptyDirNumForAll=$(($emptyDirNumForAll+1))
      return 1
  else
      local flag=0
      for item in "${arrayInDEDO[@]}";do
        local itemPath="${dirPath}/${item}"
        if [ "$item" != "."  ] && [ "$item" != ".." ] && [ -d "${itemPath}"  ]; then
            delete_empty_dirs_once "${dirPath}/${item}"
            if [ $? -eq 1  ]; then
                flag=1
            fi
        fi
      done
      return $flag
  fi
}

delete_empty_dirs(){
  local topDirPath=$1
  if [ ! -d "${topDirPath}" ]; then
      return 1
  fi
  emptyDirNumForAll=0
  deleteTime=0
  local  flag=1
  while [ $flag -eq  1 ]; do
    emptyDirNumForOnce=0
    deleteTime=$(($deleteTime+1))
    delete_empty_dirs_once "${topDirPath}"
    flag=$?
    echo "第${deleteTime}輪清理,刪除了${emptyDirNumForOnce}個(gè)空文件夾。"
  done
  echo "進(jìn)行了${deleteTime}輪清理,總共刪除了${emptyDirNumForAll}個(gè)空文件夾。"

}

delete_empty_dirs "$1"

使用方法

在需要Linux中,將代碼通過(guò)vim或者cat寫(xiě)入到一個(gè)shell腳本文件,如clean.sh,并通過(guò)chmod +x賦予該文件可執(zhí)行權(quán)限,然后通過(guò)./<腳本文件名> <待清理的路徑>執(zhí)行清理任務(wù) 。例如./clean.sh /root/geoscene/geoscene ,注意路徑的最后不要帶/。

測(cè)試效果

本文的腳本會(huì)統(tǒng)計(jì)最后刪除了多少個(gè)空文件夾,并將全部的刪除記錄打印到控制臺(tái),同時(shí)將刪除文件清單輸出到腳本所在文件夾下的output.txt文件中。

總結(jié)

本腳本通過(guò)循環(huán)和遞歸將整個(gè)任務(wù)分解成一輪一輪的清理任務(wù),直到再也找不到空文件夾為止。實(shí)現(xiàn)方式比較暴力,沒(méi)有考慮時(shí)間復(fù)雜度。如果您有更優(yōu)的解決方案,歡迎通過(guò)留言評(píng)論進(jìn)行交流。

補(bǔ)充

當(dāng)然Linux還可以實(shí)現(xiàn)自下而上的刪除空文件夾,下面是實(shí)現(xiàn)方法

需求

在工作中遇到一個(gè)需求:

  • 刪除一個(gè)指定的文件夾,如果刪除后,其上一層文件夾也是空文件夾,則也刪除其上一層文件夾;
  • 如果刪除其上一層文件夾后,上一層文件夾的再上一層文件夾也是空,也刪除再上一層文件夾;
  • 依次類(lèi)推,直到刪除到一個(gè)指定的文件層級(jí);
  • shell腳本實(shí)現(xiàn);

簡(jiǎn)單地說(shuō)就是要自下而上地刪除Linux的空文件夾。

實(shí)現(xiàn)

以下是完成的shell方法,,經(jīng)過(guò)測(cè)試,能正常使用。

代碼

delete_empty_dir(){
  fromDirInDED="$1"
  toDirInDED=$2
  if [ "$fromDirInDED" = "" ] || [ "$toDirInDED" = "" ] || [ ${#fromDirInDED} -lt ${#toDirInDED} ] ; then
      echo "delete_empty_dir方法參數(shù)錯(cuò)誤。"
      return 1
  fi

  if [ ! -d "$fromDirInDED" ]; then
      echo "文件夾不存在:${fromDirInDED} 。"
      return 1
  fi

  if [ "$fromDirInDED" = "$toDirInDED" ]; then
      echo "抵達(dá)最終文件層級(jí)。"
      return 0
  fi

  lsStrInDED=`ls -a ${fromDirInDED}`
  arrayInDED=(${lsStrInDED})
  if [  ${#arrayInDED[@]} -le 2 ]; then
      rm -rf "${fromDirInDED}"
      echo "刪除空文件夾:${fromDirInDED}"
      delete_empty_dir `dirname ${fromDirInDED}` "${toDirInDED}"
  else
     echo "此文件夾非空:${fromDirInDED} 。"
     echo "完成空文件夾清理。"
  fi
}

使用說(shuō)明

該方法需要兩個(gè)參數(shù),第一個(gè)參數(shù)為需要?jiǎng)h除的最下一層文件夾的絕對(duì)路徑,該文件夾無(wú)論是不是為空,都會(huì)被刪除,第二個(gè)參數(shù)為停止刪除的文件夾的絕對(duì)路徑。

如:需要?jiǎng)h除/root/myApps/laoWang/CSDN/blogs/test/shell目錄,并判定其上層文件夾是否為空文件夾,如果為空也將刪除,直到/root/myApps/laoWang才停止刪除操作。

那么完成上述需求的執(zhí)行代碼為:delete_empty_dir /root/myApps/laoWang/CSDN/blogs/test/shell /root/myApps/laoWang

到此這篇關(guān)于Linux實(shí)現(xiàn)徹底清理空文件夾的方法詳解的文章就介紹到這了,更多相關(guān)Linux清理空文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談shell循環(huán)中變量的作用域問(wèn)題

    淺談shell循環(huán)中變量的作用域問(wèn)題

    今天小編就為大家分享一篇淺談shell循環(huán)中變量的作用域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • linux 權(quán)限管理命令腳本解析

    linux 權(quán)限管理命令腳本解析

    這篇文章主要為大家介紹了linux 權(quán)限管理命令腳本解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • vim快捷鍵大全

    vim快捷鍵大全

    vi(vim)是上Linux非常常用的編輯器,很多Linux發(fā)行版都默認(rèn)安裝了vi(vim)。這篇文章主要介紹了vim快捷鍵大全的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Linux壓縮和解壓命令大全之tar、gzip和zip詳細(xì)教程

    Linux壓縮和解壓命令大全之tar、gzip和zip詳細(xì)教程

    本文介紹了常用的壓縮和解壓命令,包括tar、gzip和zip,通過(guò)使用這些命令,我們可以方便地對(duì)文件和目錄進(jìn)行壓縮和解壓操作,從而節(jié)省存儲(chǔ)空間和提高傳輸效率,需要的朋友可以參考下
    2023-09-09
  • 一個(gè)Shell小腳本精準(zhǔn)統(tǒng)計(jì)Mysql每張表的行數(shù)實(shí)現(xiàn)

    一個(gè)Shell小腳本精準(zhǔn)統(tǒng)計(jì)Mysql每張表的行數(shù)實(shí)現(xiàn)

    這篇文章主要介紹了一個(gè)Shell小腳本精準(zhǔn)統(tǒng)計(jì)Mysql每張表的行數(shù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解

    Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解

    這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • rhel5.7下安裝gearmand及啟動(dòng)的方法

    rhel5.7下安裝gearmand及啟動(dòng)的方法

    這篇文章主要介紹了rhel5.7下安裝gearmand及啟動(dòng)的方法,需要的朋友可以參考下
    2014-07-07
  • crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行的腳本

    crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行的腳本

    這篇文章主要介紹了crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • shell命令返回值判斷的方法實(shí)現(xiàn)

    shell命令返回值判斷的方法實(shí)現(xiàn)

    本文主要介紹了shell命令返回值判斷的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Shell正則表達(dá)式學(xué)習(xí)筆記

    Shell正則表達(dá)式學(xué)習(xí)筆記

    正則表達(dá)式是一種表示方式,可以讓你查找匹配特定的準(zhǔn)則的文本,例如以字母a開(kāi)頭的文件,學(xué)好正則表達(dá)式將使以后的文本處理變得方便,快速,本文給大家介紹shell正則表達(dá)式學(xué)習(xí)筆記,對(duì)shell正則表達(dá)式相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12

最新評(píng)論