如何获取所有超过特定大小的文件并删除它们

27
  1. 我正在寻找一个 Linux 命令,可以获取当前目录及其子目录中所有超出特定大小的文件。

  2. 删除所有这些文件最简单的方法是什么?


还可以在Super User上查看如何查找大于/小于x字节的文件? - jww
4个回答

67

与exec rm答案类似,但不需要为每个找到的文件启动一个进程:

find . -size +100k -delete

16

一行代码:

find . -size +100k -exec rm {} \;

第一部分(find . -size +100k)查找当前目录(.)下大小超过(+)100 k字节(100k)的所有文件。

第二部分(-exec rm {} \;)在每个找到的文件上调用给定的命令。{}是当前文件名(包括路径)的占位符。\;只是命令结束的标志。

记得通过运行原始的find来始终检查你的筛选条件是否正确:

find . -size +100k

或者,甚至在删除之前你可以制作一份备份副本:

find . -size +100k -exec cp --parents {} ~/backup \;

“记得始终通过运行原始查找来检查您的过滤条件是否正确”非常有用(在Linux中,不能太小心了,因为rm是不可饶恕的!),所以我会点赞这个建议。 - warship

2

Python已经安装在所有基于Unix的操作系统上,那么为什么不使用它来代替Bash?

我总是觉得与awk和sed相比,Python更易读。

这是我会写的Python代码:

import os
Kb = 1024 # Kilo byte is 1024 bytes
Mb = Kb*Kb
Gb = Kb*Kb*Kb
for f in os.listdir("."):
    if os.stat(f).st_size>100*Kb:
        os.remove(f)

这是使用python -c的一行版本:

python -c "import os; [os.remove(f) for f  in os.listdir('.') if os.stat(f).st_size>100*1024]"

如果您想递归应用搜索,请参见此处


1
zsh中:
ls -l *(Lk+100)   # list file size greater than 100kb

所以:

rm *(Lk+100)

更多的zsh技巧在这里

这不是递归的。使用 **/*(.Lk+100) #点号排除大小无关紧要(在寻找小文件时无用)的目录。 - YvesgereY

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