这是从目录中删除 x 文件以外的任何内容的命令
(ls -t|head -n 5;ls)|sort|uniq -u|xargs rm
我想如何修改它以使用命令行从目录外部执行相同操作
这是从目录中删除 x 文件以外的任何内容的命令
(ls -t|head -n 5;ls)|sort|uniq -u|xargs rm
我想如何修改它以使用命令行从目录外部执行相同操作
试试这个:
cd /path/to/dir && { (ls -t|head -n 5;ls)|sort|uniq -u|xargs rm; }
如果目录不存在,它什么也不做。
对于您的原始行,我建议您可以反转排序并使用 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 {} \;
使用 find 仅保留 x 个最新文件:
find /path/to/dir ! -newer $(ls -t | sed 'x!d') -exec rm {} \;