2014-09-11 19 views
0

我有一个复制构建目录的路径,所以我只需要保留最新的3个目录并删除其他目录,而不是按日期,而是使用最新的内部版本号。删除一个以内部版本号结尾的目录

,如果我有在路径/ tmp目录

1.1.0000-21, 1.1.0000-5, 1.1.0000-18, 1.1.0000-4 

我应该在/tmp路径作为其最古老的目录中删除1.1.0000-4目录下面的目录。

我正在尝试rm -rf /base/path -type d -ctime 4,但这是基于最新的文件,不知道要删除最旧的数字,我需要一些reg-ex在这里吗?

回答

1

您可以结合sorttail这个

ls \   # Produce the list of directories, 
| sort -r \ # reorder it in reverse dictionary order 
| tail -n +5 # and trim the first 4 = 5-1 entries 

这假定版本以便与字典顺序,哪个是假的,如果你的版本没有固定长度一致(所以2.0版的外观较新的为12.0) 。你可以通过调用sort函数来解决这个问题。

+0

是Michael,长度不固定。我用文件夹名更新了我的问题。我发现编号第一个数字在连字符( - )后面,因此,如果有XXXXXX-84,XXXXXX-2,XXXXXX-114和XXXXXX-3,那么114,2和3将作为新版本反向),这是错误的。 – guest 2014-09-11 12:04:18

+0

谢谢你的帮助迈克尔。如果我的所有版本的增量顺序相同(大部分都是),那么以下方法将起作用。 ls | sort -nr | tail -n +4 | xargs rm -rf – guest 2014-09-11 13:26:12