如何删除除最新的N个文件以外的所有文件?

4
此命令允许我从我的电脑登录到服务器的特定目录:此处ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash" 接下来,我该如何在该目录下执行操作?实际上,我想要删除除最新的N个文件之外的所有文件。 find ./tmp/ -maxdepth 1 -type f -iname *.tgz | sort -n | head -n -10 | xargs rm -f

你可以将第一个命令中的 bash 替换为第二个命令中的 find... 管道。 - anishsane
2个回答

7

这个命令应该可以正常运行:

ls -t *.tgz | tail -n +11 | xargs rm -f

警告: 在执行 rm -f 命令之前,请确认由 ls -t *.tgz | tail -n +11 列出的文件是符合预期的。

工作原理:

ls 命令会列出目录中的内容。使用 -t 参数按照修改时间进行排序(最新的排在前面)。更多信息请参考 ls 的 man 手册。

tail -n +11 命令从第 11 行开始输出。更多信息请参考 tail 的 man 手册。

如果系统是 Mac OS X,则也可以根据创建时间进行删除。使用带有 -Ut 标志的 ls 命令即可。这将按照创建时间对内容进行排序。


1
您可以使用这个命令,
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted; ls -t *.tgz  | tail -n
+11 | xargs rm -f; bash"

在引号内,我们可以添加要在远程机器上执行的任何操作。但是每个命令都应以分号(;)终止。
注意:已包含silentMonk建议的相同命令。它很简单,而且有效。但在执行操作之前,请先验证一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接