2015-12-17 17 views
5

关于查找/删除目录中最旧的目录/文件的stackoverflow有几个不同的主题。我阅读了很多,并且看到了很多不同的方式,这些方式对于其他系统中的某些人显然有效,但在我的情况下不适用于我。通过Bash删除除FreeBSD上最旧的目录(no -printf,带空格,无zsh)

约束条件是:

我得到的最接近的是这样的东西(不完整):

find . -maxdepth 1 -d -name "Backup Set*" -print0 | xargs -0 stat -f "%m %N" | sort -r| awk 'NR>5' 

这给了我,我想删除但他们现在已经时间戳前缀的目录,这我不知道,如果我去掉和管RM我会回来的情况下,我不能删除目录与他们的空间。

输出:

1450241540 ./Backup Set1 
1450241538 ./Backup Set0 

感谢这里的任何帮助。


,我看了相关的帖子:

https://superuser.com/questions/552600/how-can-i-find-the-oldest-file-in-a-directory-tree

Bash scripting: Deleting the oldest directory

Delete all but the most recent X files in bash

+0

做了'统计输出可以让你输入额外的dbl引号,例如'stat -f“%m \”%N \%“”'?好Q,祝你好运。 – shellter

回答

3
... | awk 'NR>5' | while read -r timestamp filename; do rm -rf "${filename}"; done 

当有比read指定的变量更多的领域,remaind呃简单地集中在最后指定的变量中。在我们的例子中,我们提取时间戳,并按原样使用其他所有文件名。我们遍历输出并为每个条目运行一个rm

我会建议使用echo而不是rm进行测试运行,以便您可以先验证结果。


或者,如果你愿意的xargs -0版本:

... | awk 'NR>5' | while read -r timestamp filename; do printf "%s\0" "${filename}"; done | xargs -0 rm -rf 

这也采用了while read但显示空字节分隔符可以通过xargs -0摄取的每个文件名。

+0

感谢你们,我尝试了前者,它的工作原理 - 警告你必须从脚本运行它,我不能直接从命令行运行它,因为我一直以这种方式测试我的命令。 – skimon

0

管道此剪切命令cut -d ' ' -f 2-将拿出时间戳

简单的例子

echo '1450241538 ./Backup Set0'|cut -d ' ' -f 2- 

将摆脱时间戳的

结果将

./Backup Set0