如何删除当前目录中除最后两个文件之外的所有文件

如何删除当前目录中除最后两个文件之外的所有文件

假设当前目录中有 10 个文件/home/usr。它们的编号为1- 10。如果我想删除除9和 之外的所有文件10,我该怎么做?

我可以通过执行以下操作来选择底部两个文件

ls -l /home/usr/ | tail -2

但是,我将如何使用此信息来删除除最后两个之外的所有信息?换句话说,我将如何删除1- 8

我要澄清一些事情。我想根据文件列表ls -l而不是具体根据文件名称来删除。正如那些1-10文件就是例子。它应该删除文件,无论具体名称如何,并删除ls -l.

答案1

zsh

echo rm -f /home/usr/*(n[1,-3])

echo(高兴时删除)

  • n按数字顺序排序(2 后 10)
  • [1,-3]仅选择第一个到倒数第三个。

D如果您还想考虑隐藏文件,请添加 glob 限定符)

答案2

不太漂亮的非zsh解决方案:

find . -name 'prefix*' | sort -V | head -n -2 | xargs echo rm --

假设:

  1. 假设所有文件都共享相同的文件名前缀prefix,并且名称中没有换行符或其他有趣的字符。
  2. 您的sort支持-V,并且在您的情况下排序正确(我使用相同的简单prefix+数字形式的文件对其进行了测试,它对我有用,在顺便说一句touch prefix{1..100}中使用生成bash)。
  3. 你们的head支持-n

(当前所有 GNU/Linux 发行版均应支持这些参数。)

移除echo即可解锁。

答案3

如果你的文件确实被命名为1到10,你可以使用

rm {1,8}

或者它的变体来指示范围,例如foobar{1,8}

相关内容