将x文件保存在目录中并删除所有旧文件

时间:2013-07-24 17:20:41

标签: bash

这是从目录

中删除除x文件以外的任何内容的命令
(ls -t|head -n 5;ls)|sort|uniq -u|xargs rm

我想如何修改它以使用命令行

从目录外部执行相同的操作

3 个答案:

答案 0 :(得分:2)

试试这个:

cd /path/to/dir && { (ls -t|head -n 5;ls)|sort|uniq -u|xargs rm; }

如果目录不存在,它将不执行任何操作。

答案 1 :(得分:2)

对于您的原始行我建议您可以反转排序并使用head来排除最后一行。然后它变成:

ls -drt ~/somedir/* | head -n-5 | xargs rm

我鼓励你研究这样的问题的find命令。您可以获得更多控制权,并且可以处理诸如关系之类的事情(例如,删除早于第五个旧文件的文件)

有未答复的详细信息,如:

  • 我假设您要在timechecks中排除子目录
  • 我也猜测使用ls你想要非递归
  • 不知道你想对隐藏文件做些什么

你明白了。 find的手册页有例子,但是有:

DIR=cdplatform && find $DIR -maxdepth 1 -type f ! -newer $(ls -Fdrt ${DIR}/* | grep -v "/$" | head -n-4 | tail -1) -exec rm {} \;

答案 2 :(得分:2)

使用find仅保留x个最新文件:

find /path/to/dir ! -newer $(ls -t | sed 'x!d') -exec rm {} \;