SSymbolLink.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.IO;
  3. using UnityEngine;
  4. namespace SUnityEditorTools
  5. {
  6. /// <summary>
  7. /// 硬链接目录工具。。。支持win+mac, 需要win 7以上才有mklink命令
  8. /// </summary>
  9. public class SUnityEditorTools
  10. {
  11. /// <summary>
  12. /// 删除硬链接目录
  13. /// </summary>
  14. /// <param name="linkPath"></param>
  15. public static void DeleteLink(string linkPath)
  16. {
  17. var os = Environment.OSVersion;
  18. if (os.ToString().Contains("Windows"))
  19. {
  20. SEditorUtils.ExecuteCommand(String.Format("rmdir \"{0}\"", linkPath));
  21. }
  22. else if (os.ToString().Contains("Unix"))
  23. {
  24. SEditorUtils.ExecuteCommand(String.Format("rm -Rf \"{0}\"", linkPath));
  25. }
  26. else
  27. {
  28. Debug.LogError(String.Format("[SymbolLinkFolder]Error on OS: {0}", os.ToString()));
  29. }
  30. }
  31. public static void SymbolLinkFolder(string srcFolderPath, string targetPath)
  32. {
  33. var os = Environment.OSVersion;
  34. if (os.ToString().Contains("Windows"))
  35. {
  36. SEditorUtils.ExecuteCommand(String.Format("mklink /J \"{0}\" \"{1}\"", targetPath, srcFolderPath));
  37. }
  38. else if (os.ToString().Contains("Unix"))
  39. {
  40. var fullPath = Path.GetFullPath(targetPath);
  41. if (fullPath.EndsWith("/"))
  42. {
  43. fullPath = fullPath.Substring(0, fullPath.Length - 1);
  44. fullPath = Path.GetDirectoryName(fullPath);
  45. }
  46. SEditorUtils.ExecuteCommand(String.Format("ln -s {0} {1}", Path.GetFullPath(srcFolderPath), fullPath));
  47. }
  48. else
  49. {
  50. Debug.LogError(String.Format("[SymbolLinkFolder]Error on OS: {0}", os.ToString()));
  51. }
  52. }
  53. /// <summary>
  54. /// 删除指定目录所有硬链接
  55. /// </summary>
  56. /// <param name="assetBundlesLinkPath"></param>
  57. public static void DeleteAllLinks(string assetBundlesLinkPath)
  58. {
  59. if (Directory.Exists(assetBundlesLinkPath))
  60. {
  61. foreach (var dirPath in Directory.GetDirectories(assetBundlesLinkPath))
  62. {
  63. DeleteLink(dirPath);
  64. }
  65. }
  66. }
  67. }
  68. }