精华内容
下载资源
问答
  • Unity 自动清理空文件夹 因为项目管控用的是Git,没法上传空文件夹。但是Unity又会对空文件夹生成相应的meta文件。导致Git提交的时候会提交这些meta文件。当项目中其他人拉下来的时候Unity又会将这些meta文件进行...

    Unity 自动清理空文件夹

    因为项目管控用的是Git,没法上传空文件夹。但是Unity又会对空文件夹生成相应的meta文件。导致Git提交的时候会提交这些meta文件。当项目中其他人拉下来的时候Unity又会将这些meta文件进行删除。一来二去冲突就来了。

    使用CleanEmptyDir插件

    插件挺好用的,就是美术还是不会去点进去自己清理一遍。所以,决定自己把它改成纯自动的。

    代码实现

    清理的核心代码还是用的插件的,然后把搜索部分开了个线程来跑。然后加了个自动清理的功能。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading;
    using UniRx;
    using UnityEditor;
    using UnityEngine;
    
    namespace AltProg.CleanEmptyDir
    {
        [InitializeOnLoad]
        public class AutoCleanEmptyDir
        {
            /// <summary>
            ///     资源地址
            /// </summary>
            private static readonly string dataPath;
    
            /// <summary>
            ///     是否正在清理
            /// </summary>
            private static bool cleaning;
    
            /// <summary>
            ///     自动清理触发事件
            /// </summary>
            private static readonly BoolReactiveProperty autoCleanDir = new BoolReactiveProperty();
    
            /// <summary>
            ///     定时清理事件
            /// </summary>
            private static IDisposable timerClean;
    
            static AutoCleanEmptyDir()
            {
                dataPath = Application.dataPath;
                CheckAutoCleanDir();
                autoCleanDir.Subscribe(OnAutoClean);
            }
    
            /// <summary>
            ///     自动清理启动函数
            /// </summary>
            private static void AutoClean()
            {
                if (cleaning) return;
                Debug.Log("检测到工程资源变动,开始检查是否有空文件夹。");
                Observable.Start(FindEmptyDir).ObserveOnMainThread().Where(_ =>
                {
                    Debug.Log(_.Count > 0 ? $"检测到空文件夹{string.Join("\n", _)}" : "未检测到空文件夹。");
                    return _.Count > 0;
                }).Subscribe(DeleteEmptyDir);
            }
    
            /// <summary>
            ///     自动清理菜单函数
            /// </summary>
            [MenuItem("Assets/自动清理空文件夹")]
            public static void CheckAutoCleanDir()
            {
                autoCleanDir.Value = !autoCleanDir.Value;
            }
    
            /// <summary>
            ///     当自动清理选项bool状态转换时
            /// </summary>
            private static void OnAutoClean(bool state)
            {
                timerClean?.Dispose();
                timerClean = null;
                if (state)
                {
                    EditorApplication.projectChanged += AutoClean;
                    Debug.Log("已启动自动清理空文件夹,将在工程资产变动时进行清理。");
                }
                else
                {
                    EditorApplication.projectChanged -= AutoClean;
                    timerClean = Observable.Timer(TimeSpan.FromHours(1)).Subscribe(_ => autoCleanDir.Value = true);
                    Debug.Log("已关闭自动清理空文件夹,将在1小时后自动开启。");
                }
    
                Menu.SetChecked("Assets/自动清理空文件夹", state);
            }
    
            /// <summary>
            ///     寻找空文件夹
            /// </summary>
            /// <returns>空文件夹列表</returns>
            private static List<DirectoryInfo> FindEmptyDir()
            {
                var newEmptyDirs = new List<DirectoryInfo>();
                WalkDirectoryTree(dataPath, (dirInfo, areSubDirsEmpty) =>
                {
                    var isDirEmpty = areSubDirsEmpty && DirHasNoFile(dirInfo);
                    if (isDirEmpty)
                        newEmptyDirs.Add(dirInfo);
                    return isDirEmpty;
                });
                return newEmptyDirs;
            }
    
            /// <summary>
            ///     删除空文件夹
            /// </summary>
            /// <param name="infos">空文件夹列表</param>
            private static void DeleteEmptyDir(List<DirectoryInfo> infos)
            {
                cleaning = true;
                foreach (var dirInfo in infos) AssetDatabase.MoveAssetToTrash(GetRelativePathFromCd(dirInfo.FullName));
                cleaning = false;
            }
    
            /// <summary>
            ///     判断是否为空文件夹
            /// </summary>
            /// <param name="dirInfo">文件夹信息</param>
            /// <param name="areSubDirsEmpty">是否为空文件夹</param>
            private delegate bool IsEmptyDirectory(DirectoryInfo dirInfo, bool areSubDirsEmpty);
    
            /// <summary>
            ///     遍历文件夹树
            /// </summary>
            /// <param name="rootPath">根文件路径</param>
            /// <param name="pred">判空方法</param>
            /// <returns></returns>
            private static bool WalkDirectoryTree(string rootPath, IsEmptyDirectory pred)
            {
                var root = new DirectoryInfo(rootPath);
                //获取当前目录下的文件夹
                var subDirs = root.GetDirectories();
    
                //这个子文件是否为空
                var areSubDirsEmpty = true;
                //遍历子文件夹
                foreach (var dirInfo in subDirs)
                    if (false == WalkDirectoryTree(dirInfo.FullName, pred))
                        areSubDirsEmpty = false;
    
                var isRootEmpty = pred(root, areSubDirsEmpty);
                return isRootEmpty;
            }
    
            /// <summary>
            ///     判断文件夹是否不存在文件
            /// </summary>
            /// <param name="dirInfo"></param>
            /// <returns></returns>
            private static bool DirHasNoFile(DirectoryInfo dirInfo)
            {
                FileInfo[] files = null;
    
                try
                {
                    files = dirInfo.GetFiles("*.*");
                    files = files.Where(x => !IsMetaFile(x.Name)).ToArray();
                }
                catch (ThreadAbortException)
                {
                }
                catch (Exception e)
                {
                    Debug.LogError(e.Message);
                }
    
                return files == null || files.Length == 0;
            }
    
            /// <summary>
            ///     判断是否是Meta文件
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            private static bool IsMetaFile(string path)
            {
                return path.EndsWith(".meta");
            }
    
            private static string GetRelativePathFromCd(string filespec)
            {
                return GetRelativePath(filespec, Directory.GetCurrentDirectory());
            }
    
            private static string GetRelativePath(string filespec, string folder)
            {
                var pathUri = new Uri(filespec);
                // Folders must end in a slash
                if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) folder += Path.DirectorySeparatorChar;
                var folderUri = new Uri(folder);
                return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString()
                    .Replace('/', Path.DirectorySeparatorChar));
            }
        }
    }
    

    注意事项

    1. 默认情况下当工程资源改动时就会触发清理。但是当美术烘焙场景生成光照贴图的时候会把原本的光照贴图删了,再生成。这中间有时候会先被当成空文件夹给清理掉。所以烘焙场景的时候最好先取消自动清理空文件夹的功能。
    2. 代码引用了UniRx库,不需要的可以自行修改。
    3. 有个弊端就是没法在Project窗口里直接新建文件夹了,要不就先暂时把功能关了,要不就直接去Windows文件管理窗口新建,然后把东西放进去。
    4. 关闭功能后,1小时后会自动勾选,具体的时间可以去代码里面进行调节。
    展开全文
  • 再加上使用一些Git工具时含空文件不允许提交,因此就寻思着可不可以写一个脚本直接一键清理空文件夹。最终实现的效果如下:最终实现效果-右键点击最终实现效果-清理完成这也是我第一次学习书写windows批处理命令,...

    日常学习工作免不了使用电脑,而作为一个强迫症,看到电脑中有空文件及其不爽;

    再加上使用一些Git工具时含空文件不允许提交,因此就寻思着可不可以写一个脚本直接一键清理空文件夹。

    最终实现的效果如下:

    311a6b4c1bbe

    最终实现效果-右键点击

    311a6b4c1bbe

    最终实现效果-清理完成

    这也是我第一次学习书写windows批处理命令,感觉挺好玩的,特此做个记录。

    因为本人也是从0学的,因此本教程对小白极其友好,完全不用担心学不会。如果感觉命令看着不舒服,或是不想知道具体原理,也可以直接下载我写好的开源代码直接进行设置即可使用

    开发环境

    windows 10

    Sublime Text 3

    代码编写

    不想知道具体实现原理的可以直接跳过这一步,没有任何影响

    前期准备

    因为Sublime默认保存文件编码为utf-8,而一旦输入中文,windows系统将无法识别,在最终的命令行窗口会出现乱码的情况,因此,需要安装插件使sublime支持gbk编码

    安装PackageControl,参考网上的教程即可

    Ctrl + Shift + P,在弹出来的输入框中输入install,选择Package Control: Install Package,如果没有,则重复第一步

    安装插件ConvertToUTF8

    编码

    打开Sublime编辑器,新建文件另存为清理空文件夹.bat

    键入以下命令:

    @echo off

    echo 正在删除当前目录及子目录中所有的空文件夹,请稍后......

    echo -------------------------------------------------------------

    cd. > listnull.txt

    for /f "delims=" %%a in ('dir /ad /b /s') do (

    dir /b "%%a" | findstr .>nul || echo %%a >> listnull.txt

    )

    set /a sum=0

    for /f "tokens=*" %%i in (listnull.txt) do (

    rd /q "%%i"

    echo 成功删除空目录:%%i

    set /a sum=sum+1

    )

    del listnull.txt /f /q

    echo -------------------------------------------------------------

    echo 共成功删除%cd%目录及其子目录下%sum%个空文件夹

    pause

    其中:

    @echo off表示下面的命令不打印出来;

    echo命令表示输出;

    cd. > listnull.txt表示获取当前文件夹路径并写入到listnull.txt中;

    for /f "delims=" %%a in ('dir /ad /b /s') do ()表明执行一个for循环,该for循环将遍历子目录并录入listnull.txt文件中;其中/f表示读取in后括号内的内容;delims表示不使用分隔符;%%a为变量,类似于普通程序语言的i;dir表示显示目录中的文件和子目录列表,/ad表示显示具有指定属性为目录的文件,/b表示使用空格式(没有标题信息或摘要),s表示显示指定目录和所有子目录中的文件;

    for循环内的语句表示将子目录写入listnull.txt文件中,其中>>表示接着上一次的写入继续写;

    其后,设置变量sum=0,/a表示其后为一个表达式;

    然后循环遍历listnull.txt文件内容,读取目录下的文件夹,并依次进行删除,rd命令表示删除空文件夹;将sum的值+1以计数;

    for循环执行完之后,使用del命令删除listnull.txt文件,/f表示强制删除,/q表示安静模式,删除时不要求确认;

    打印信息;

    pause表示暂停,等待按键继续,也就是命令行窗口不关闭,如果不写该行语句,则程序运行完自动关闭

    单击sublime编辑器左上角File,选择Set File Encoding to,单击Chinese Simplified(GBK):

    311a6b4c1bbe

    保存为GBK编码

    然后保存文件即可,记住保存的位置,后续配置鼠标右键会用上

    配置到鼠标右键

    下载ContextMenuManager软件,该软件为开源软件,可以便捷管理鼠标右键菜单,无任何广告,也无需安装,如果使用完不想要了也可以直接删除,不会影响在软件上的已设置好的功能

    双击打开软件,点击左侧的目录背景,再点击右上角的加号图标:

    311a6b4c1bbe

    目录背景

    在对话框中输入快捷实现(该文字为鼠标右键显示的文字,可自行设定),点击多级按钮,最后点击确定:

    311a6b4c1bbe

    设定一级菜单

    可以看到下方列表出现了快捷实现这个菜单,单击功能按钮:

    311a6b4c1bbe

    单击功能按钮

    在弹出来的对话框中单击加号添加子项:

    311a6b4c1bbe

    添加子项

    输入子项标题,单击浏览按钮添加之前存储的清理空文件夹.bat文件,最后单击确定:

    311a6b4c1bbe

    子项设置

    最后关闭软件即可

    最终实现效果

    进入任意一个文件夹内,单击鼠标右键,即可看到之前设定的子项,点击即可在当前文件夹内执行批处理命令,最终实现的效果如下:

    311a6b4c1bbe

    最终实现效果-右键点击

    311a6b4c1bbe

    最终实现效果-清理完成

    展开全文
  • 空白文件夹清理.bat

    2020-12-21 10:24:21
    一个简易的空白文件夹清理工具,将文件复制到要清理的文件夹下,右击,管理员模式运行,就能自动清理文件夹下的空白文件夹
  • 空文件夹清理工具

    2016-04-07 16:25:16
    批量删除空文件夹,能自动搜索硬盘上所有的空白文件夹,同时支持删除_desktop.ini和thumbs.db之类的windows隐藏文件
  • 电脑空文件夹清理工具,电脑磁盘内有空文件夹的,这个软件会自动查找,并且选择删除
  • 空文件夹清理工具是一款便捷使用的删除电脑上空白文件夹的小工具,此款软件小巧实用,能够一键扫描、删除电脑上的空白文件夹。 空文件夹清理工具使用方法 直接打开即可自动运行并删除空白文件夹 软件会自动删除各...
  • 一、具体python脚本代码 学习至:... import datetime import os import time from datetime import timedelta ...*Description: 删除指定目录下的过期文件和空文件夹 *Author:Mr...

     一、具体python脚本代码 

    学习至:https://blog.csdn.net/QMW19910301/article/details/82851229

    import datetime
    import os
    import time
    from datetime import timedelta
    
    """
    *Description:  删除指定目录下的过期文件和空文件夹
    *Author:Mr. Yu
    *Date:2019/10/25
    """
    
    
    def delDir(dirPath, datetime01):
        # 获取文件夹下所有文件和文件夹
        files = os.listdir(dirPath)
        for file in files:
            filePath = dirPath + "/" + file
            # 判断是否是文件
            if os.path.isfile(filePath):
                # 最后一次修改时间
                last1 = os.stat(filePath).st_mtime  # 获取文件时间戳
                filetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(last1))  # 时间格式转化
                if datetime01 < filetime:
                    os.remove(filePath)
                    print(filePath + "was removed")
            elif os.path.isdir(filePath):  # 是文件夹
                # delDir(filePath, datetime01)
                # 删除空文件夹
                if not os.listdir(filePath):
                    os.rmdir(filePath)
                    print(filePath + "was removed")
    
    
    if __name__ == '__main__':
        # 获取路径
        path = "F:Test"
        # 获取过期时间
        startTime = datetime.datetime.now()
        d1 = startTime + timedelta(days=-7)
        date1 = str(d1)
        index = date1.find('.')  # 第一次出现的位置
        datetime0 = date1[:index]
        # while True:
        delDir(path, datetime0)
        time.sleep(100)
    

    二、利用Windows任务计划程序  自动定时删除指定目录下文件

    1.鼠标右键 ‘我的电脑’ -->管理-->任务计划程序

     2.创建基本任务   输入任务名称和描述,  点击下一步

     3. 创建触发器

     

    4. 选择操作  ,一般选择启动程序就OK

     

    5.完成

     

    新手学习记录,欢迎各位大佬指正! 

     
     
    展开全文
  • #删除evt文件夹下所有空文件夹 #判断文件夹是否为空函数 is_empty_dir(){ return `ls -A $1 | wc -w` } #要测试的文件夹在./evt目录下 folder="./evt" for file in `ls $folder` do #调用判断是否为...

    话不多说,直接上代码:

    #!/bin/bash
    #删除evt文件夹下所有空文件夹
    
    #判断文件夹是否为空函数
    is_empty_dir(){
       return `ls -A $1 | wc -w`
    }
    
    #要测试的文件夹在./evt目录下
    folder="./evt"
    
    for file in `ls $folder`
    do
    #调用判断是否为空文件夹函数
    if is_empty_dir $folder"/"$file  #注意文件夹目录中间要加个空格
    then
        echo "$file is empty"
        #删除该空文件夹
        rm -rf $folder"/"$file
    else
        echo "$file is not empty"
    fi
    done

    是不是很方便呢?

    展开全文
  • 空文件夹在 git 提交时是会被默认忽略的,当我们有很多空文件夹还必须要保留时一个个处理不方便,所以要批量解决这个问题。 在顶层根文件夹执行: find . -type d -empty -exec touch {}/.gitignore \; 其中: ...
  • 处理U8备份出现空文件夹的方法

    千次阅读 2017-06-01 13:45:51
    处理U8备份出现空文件夹的方法 1、在备份时需注意的地方: 备份计划的使用原理是,如设定18:00启动 触发时间是1小时的话,系统会自动在18:00时启动这个任务,但是如果此时有人操作使用帐套,就会备份失败,在...
  • rem 删除I:\BatTest\test目录下的文件及空文件夹set delFolder=I:\BatTest\test forfiles /s /p %delFolder% /m *.* /d -90 /c "cmd /c echo @file | del @file" echo %a% for...
  • 找到Free Utilities下面的Delete Empty ...我使用如下命令清除盘下没个具体的文件夹及其子文件夹文件 F:\>DelEmpty.exe -d -s -f -c -y e:\Vis 加入计划任务使其每天自动执行检查 参考文档: ...
  • 然后再尝试把这个app移出来,那么这个文件夹就会自动删掉了。 附:Adobe产品在macOS中完整删除的方法: https://helpx.adobe.com/x-productkb/global/delete-previously-installed-application-files.html ...
  • 摘要 腾兴网为您分享:怎么清理所有共享文件夹,掌上公交,晓黑板,万豪金业,图钉等软件知识,以及office2010三合一,指数99,百慕大之谜,批量修改图片大小kb,飞机设计软件,ava云直播,北京人社,中国法律服务网,...
  • 需求1:根据日期动态创建文件夹写文件。 需求2:定时删除根目录下的非空目录,如果子目录不为不删除,当目录下的文件被删除完后,删除目录。 2. 代码 package main import ( "fmt" "github....
  • linux中使用find批量删除文件及文件 linux下批量删除文件(大小等于0的文件)的方法** find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指定大小的文件,只要修改对应的 -size 参数...
  • linux自动删除tmp文件夹bash脚本

    千次阅读 2016-04-06 19:43:45
    今天有自己啥琢磨了一下用bash脚本去删除linux上的tmp文件夹。废话不多说直接贴代码。  #!/bin/bash TMP_DIRS="/tmp /var/tmp /usr/src/tmp /mnt/tmp" FILE_AGE=+3 LINK_AGE=+1 SOCK_AGE=+1 # Make EMPTYFILES ...
  • 添加任务计划 控制面板-任务计划-新增-计划的任务-用户定义的脚本 ...find /volume1/目标文件夹 -type f -mtime +7 -exec rm -rf {} ; find /volume1/目标文件夹-type d -exec rm -d {} ; ...
  • Linux tmp目录自动清理 及解决方法

    千次阅读 2019-02-22 09:36:01
    在Linux系统中/tmp文件夹下的文件是会被清理、删除的,文件清理的规则是如何设定的呢? 在root/tmp文件下 -rw-rw-r-- 1 hadoop hadoop 5 Feb 16 20:56 hadoop-hadoop-datanode.pid -rw-rw-r-- 1 hadoop hadoop 5 Feb...
  • 最近突然感觉到个人的开发机各种慢,也是啊,从我上大学时起至今,这台老古董跟了我七年多了,还好每年我会亲手给它做一两次的清理和养护,所以它现在依然可以玩命的为我工作。如果我没记错,距离我上一次做系统有两...
  • 要解决这个问题其实很简单,你只需要找出手机中的几个文件夹,然后将其删除掉,内存便会一下子出十几个G。接下来,咱们就一起来看看吧!1、DCIM这个文件夹里面存放的都是我们平时拍的照片、视频以及你下载的图片,...
  • AutoVacuum系统自动清理进程 在PostgreSQL数据库中,对表元组的UPDATE或DELETE操作并未立即删除旧版本的数据,表中的旧元组只是被标识为删除状态,并未立即释放空间。这种处理对于获取多版本并发控制是必要的,如果...
  • 编写sheel脚本 #!/bin/bash ...# 定时清理反馈结果的日志文件夹 仅保留最近2周记录 # 文件夹格式:yyyy-mm-dd # Author : Madr # Date : 2020年10月15日16:57:22 # ----------------------------------.
  • Linux tmp目录自动清理总结

    千次阅读 2018-06-26 15:14:14
    转自:http://www.cnblogs.com/kerrycode/p/5759941.html 在Linux系统中/tmp文件夹下的文件是会被清理、删除的,文件清理的规则是如何设定的呢? 以Redhat为例,这个主要是因为作业里面会调用tmpwatch命令删除那些...
  • postgresql AutoVacuum系统自动清理进程

    千次阅读 2015-12-29 14:51:15
    《PostgreSQL数据库内核分析》第2章PostgreSQL的体系结构,本章从宏观上对PostgreSQL的控制和处理流程进行了简要介绍,说明了各个模块之间是如何协同工作,...本节为大家介绍AutoVacuum系统自动清理进程。 AD:51CTO
  • 导致Gen文件夹下为。 网上的资料大多数都是要清理项目等等。 另外就是原本有Gen文件夹下的内容的源码,通过导入Android Project from Existing Code。清理代码之后就会出现同样的问题。 今天小...
  • Unity AssetBundle 之 (进阶)简单的自动 清理/移除 指定目录下的资源上 AssetBundle 的标签 的方法 目录 Unity AssetBundle 之 (进阶)简单的自动 清理/移除 指定目录下的资源上 AssetBundle 的标签 的方法 ...
  • C:\WINDOWS\Installer文件夹的安全清理

    万次阅读 2015-12-26 14:18:20
    作者:eygle |English 【转载时请标明出处和作者信息】|【恩墨学院 OCM培训传DBA成功之道】 ... 这几天微软发布了不少补丁,...没办法又要研究一下哪些空间是可以释放的,我的C:\分配了10G的空间,一度又一度的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,448
精华内容 8,579
关键字:

自动清理空文件夹