1

这是从目录中删除 x 文件以外的任何内容的命令

(ls -t|head -n 5;ls)|sort|uniq -u|xargs rm

我想如何修改它以使用命令行从目录外部执行相同操作

4

3 回答 3

2

试试这个:

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

如果目录不存在,它什么也不做。

于 2013-07-24T17:29:02.523 回答
2

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

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

我会鼓励您调查 find 命令以解决此类问题。你获得了更多的控制权,你可以处理诸如关系之类的事情(例如,删除比第五个最旧的文件)

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

  • 我假设您想在时间检查中排除子目录
  • 我也猜想ls你想要非递归的
  • 不知道你想对隐藏文件做什么

你明白了。find 的手册页有示例,但类似:

DIR=cdplatform && find $DIR -maxdepth 1 -type f ! -newer $(ls -Fdrt ${DIR}/* | grep -v "/$" | head -n-4 | tail -1) -exec rm {} \;
于 2013-07-24T17:41:37.573 回答
2

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

find /path/to/dir ! -newer $(ls -t | sed 'x!d') -exec rm {} \;
于 2013-07-24T17:50:34.457 回答