如何删除文件夹中除最新X子文件夹以外的所有子文件夹?

姆凯托

我已经看到一些使用ls的班轮,但我想避免这种情况。

我正在编写一个脚本,该脚本将代码复制到带有时间戳的文件夹中的服务器中。“当前”版本始终符号链接到恒定路径。这样,如果出现任何问题,我可以回滚。现在,每个部署都会创建一个新文件夹,但我只想保留最新的3个文件夹。

这是我当前的版本:

ls -tp | grep '/$' | grep -v 'current\|shared' | tail -n +4 | xargs -d '\n' rm -rf --

这是在包含文件夹中执行的,不包括文件,而我要保留的两个文件夹“ current”和“ shared”(当前实际上是上述的符号链接),并删除除3个最新的(排序方式为)以外的所有文件夹ls -t

有没有一种方法,我可以不ls使用,而仅使用bash和gnu工具链来做到这一点

所有用于修剪的文件夹均采用以下格式命名:

$timestamp.$branch.$sha1

SHA1和branch是git中有关确切部署内容的信息。

该服务器运行Ubuntu Xenial。

编辑:提供一些有关文件夹外观的示例

这是部署文件夹中的清单,它现在的外观:

drwxr-x--- 13 app www-data 4096 Mar 29 00:10 1490738956.develop.b806/
drwxr-x--- 13 app www-data 4096 Mar 29 00:19 1490739485.develop.ae01/
drwxr-x--- 14 app www-data 4096 Mar 29 03:33 1490751118.develop.f5b0/
lrwxrwxrwx  1 app www-data   40 Mar 29 03:33 current -> /home/app/deploy/1490751118.develop.f5b0/
drwx------  5 app root     4096 Mar 10 04:12 shared/
辛列夫

如何删除文件夹中除最近的3个子文件夹之外的所有子文件夹?

你可以利用的findsortawkxargs最后rm

find * -maxdepth 0 -type d -not -path "current" -not -path "shared" -printf "%[email protected] %p\n" | sort -nr | awk 'NR > 3 {print $2}' | xargs rm -rf

分解:

find 查找文件和目录并可能在其上执行命令的多功能工具

* 考虑当前文件夹中的元素

-maxdepth 0 不要看子文件夹

-type d 寻找目录

-not -path "current" 排除名为“当前”的目录

-not -path "shared" 排除名为“共享”的目录

-printf "%[email protected] %p\n"打印结果,并在目录名称前附加时间戳。在您的情况下,可以省略此操作,因为目录已经加了时间戳。

| sort -nr 根据时间戳以相反的顺序对列表进行排序

| awk 'NR > 3 {print $2}'打印除前三个结果以外的所有结果,并省略先前添加的时间戳。在这里,您可以选择保留多少,只用替换数字即可。3

| xargs rm -rf 删除这些目录及其所有内容

编辑:根据您的情况,由于目录名已经以时间戳开头,因此无需再次添加时间戳sort -nr即可生效。请注意,awk语法需要相应地进行编辑。

find * -maxdepth 0 -type d -not -path "current" -not -path "shared" | sort -nr | awk 'NR > 3 {print $0}' | xargs rm -rf

参考:请参阅 两个有用/相似的问答。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用.gitignore忽略文件夹中的所有子文件夹

删除Python中除最新文件夹以外的所有文件夹

从git历史记录中删除除某些文件夹以外的所有文件夹

gitignore:忽略子文件夹中除特定文件类型以外的所有内容

打印包含相同子文件夹的所有文件夹中哪些子文件夹为空?

如何在除root以外的所有子文件夹中设置410响应标头?

如何最好地删除文件夹及其子文件夹中的所有文件

如何在ckfinder中显示所有文件夹,子文件夹和文件

删除文件夹中除文件X,Y和Z以外的所有文件

删除除X个最近的文件夹外的所有文件夹

删除文件夹及其子文件夹中的所有文件

使用批处理删除文件夹中除列表中的文件以外的所有文件

如何使用PowerShell从文件夹和所有子文件夹中删除所有访问规则?

删除文件夹中除具有特定名称的文件夹外的所有文件夹

gitignore除了子子文件夹中的文件以外的所有文件

删除所有旧文件,文件夹和子文件夹的命令

如何删除除父文件夹下的某些特定文件夹以外的所有文件

批处理文件,删除目录中除最新文件夹外的所有文件夹

如何从目录和子文件夹中删除所有名为“ Sample”的文件夹?

递归清除其中没有文件的文件夹中的所有文件夹和子文件夹

删除子文件夹中的所有内容

文件夹中的tar + gz文件,不放入所有子文件夹中

将除一个子文件夹外的所有子文件夹移动到该子文件夹中

列出R中没有子文件夹的文件夹中的所有文件

删除所有子文件夹中的`target`文件夹

如何删除Linux中除少数提到的文件夹以外的所有文件夹

如何忽略提名文件夹中的_vti_cnf和_vti_pvt文件夹以及提名文件夹的所有子文件夹?

递归删除除一个子文件夹之外的所有子文件夹

如何删除目录中除最新的 10 个隐藏文件夹之外的所有文件夹

TOP 榜单

热门标签

归档