using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using System.IO; using System.Text; using System.Linq; using System; namespace MoreMountains.Tools { /// <summary> /// A maintenance class that removes all empty directories from a project via a menu item /// </summary> public class MMCleanEmptyFolders : MonoBehaviour { static string _consoleLog = ""; static List<DirectoryInfo> _listOfEmptyDirectories = new List<DirectoryInfo>(); /// <summary> /// Parses the project for empty directories and removes them, as well as their associated meta file /// </summary> [MenuItem("Tools/More Mountains/Cleanup empty folders", false, 504)] protected static void CleanupMissingScripts() { _listOfEmptyDirectories.Clear(); var assetsDir = Application.dataPath + Path.DirectorySeparatorChar; GetEmptyDirectories(new DirectoryInfo(assetsDir), _listOfEmptyDirectories); if (0 < _listOfEmptyDirectories.Count) { _consoleLog = "[MMCleanEmptyFolders] Removed "+ _listOfEmptyDirectories.Count + " empty directories:\n"; foreach (var d in _listOfEmptyDirectories) { _consoleLog += "ยท "+ d.FullName.Replace(assetsDir, "") + "\n"; FileUtil.DeleteFileOrDirectory(d.FullName); FileUtil.DeleteFileOrDirectory(d.FullName+".meta"); } Debug.Log(_consoleLog); _consoleLog = ""; AssetDatabase.Refresh(); } } /// <summary> /// Returns true if a directory is empty and updates a list of empty directories /// </summary> /// <param name="directory"></param> /// <param name="listOfEmptyDirectories"></param> /// <returns></returns> static bool GetEmptyDirectories(DirectoryInfo directory, List<DirectoryInfo> listOfEmptyDirectories) { bool directoryIsEmpty = true; directoryIsEmpty = (directory.GetDirectories().Count(x => !GetEmptyDirectories(x, listOfEmptyDirectories)) == 0) && (directory.GetFiles("*.*").All(x => x.Extension == ".meta")); if (directoryIsEmpty) { listOfEmptyDirectories.Add(directory); } return directoryIsEmpty; } } }