bash - 保留最新版本目录

bash - 保留最新版本目录

我的 Python 应用程序的存储方式有以下层次结构:

PyCharmProjects/app/versions/v1
PyCharmProjects/app/versions/v2
PyCharmProjects/app/versions/v3
PyCharmProjects/app/versions/v4
PyCharmProjects/app/versions/v5
PyCharmProjects/app/versions/v6

如何编写 bash 脚本来删除所有与最新 2 个版本不对应且超过 7 天的目录?

就像我想删除 v4、v3、v2 和 v1 一样,因为它是 9 天前创建的。

是否可以使用正则表达式来做到这一点?

PyCharm 本身有什么办法可以做到这一点吗?

答案1

find我们可以使用! -path以下命令排除命令中的路径。这将在查找中排除 v5 目录。

find directory/* ! -path directory/v5 

要排除多个目录,请! -path在 find 命令中再次重复相同的操作,如下所示。这将在查找中排除 v4 和 v5。

find directory/* ! -path directory/v4 ! -path directory/v5 

在您的场景中,我们不知道要排除的文件夹名称。所以我们可以实现另一个查找命令来代替排除目录。

下面的代码将为您提供最新的文件夹。

find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n1 | awk '{print $2}'
  • -printf '%T@ %P\n'将列出带有时间戳的文件夹
  • sort -nr将进行相反的排序,以便最新的文件夹将位于顶部。
  • head -n1将提取最新的文件夹

对于第二个最新文件夹。

find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'
  • head -n2将为您提供最新的两个文件夹。
  • tail -n1将为您提供第二个最新文件夹。

分别代替v4和v5实现上述两段代码。

 find PyCharmProjects/app/versions/* -maxdepth 1 ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` -type d -mtime +7 -delete
  • ! -path排除路径
  • -type -d查找目录
  • -maxdepth 1在当前目录中
  • -mtime +77天前修改过的目录。
  • -delete删除找到的目录。

答案2

PyCharm 本身有什么办法可以做到这一点吗?

假设这些目录代表您正在处理的程序的不同版本,处理此问题的标准且节省空间的方法是使用版本控制系统,例如git

Git 设置完成后,切换到新版本应该像键入以下内容一样简单

$ git add .
$ git commit -m 'Commit message, e.g. "Rewrote the FooBar class, added logging."'
$ git push

此序列相当于将项目复制到新目录中,但它更节省空间并且不需要删除。

如果需要,您始终可以使用简单的git checkout COMMIT_ID命令回滚到任何以前的版本。

Pycharm已经集成了Git支持,查看详细信息这里这里。但是,您也可以使用标准命令行工具。

相关内容