我需要一个命令来从目录(和子目录)中删除所有小于 20MB 的文件

6 command-line automation

除了某些文件扩展名。(从视频目录中删除除字幕文件以外的垃圾)

Li *_* Lo 6

第一次运行

find . -type f ! -name '*.sub' ! -name '*.srt' -size -20M -print  
Run Code Online (Sandbox Code Playgroud)

检查它是否只计算你想要的文件类型。我是一个很长的 Unix 用户,我总是在要求任何命令删除任何东西之前这样做(拼写错误总是发生在最糟糕的时间)。然后将前面的命令行编辑

find . -type f ! -name '*.sub' ! -name '*.srt' -size -20M -print0 | xargs -0 /bin/rm -f  
Run Code Online (Sandbox Code Playgroud)

并运行它。它应该做你想做的。! -name '*.srt'如果您需要排除更多文件,您可以多次重复该部分。小心包含单引号:它们对于防止 shell 进行文件名扩展很重要。

  • 我认为 `-exec rm {} \;` 或 `-delete` 比通过 `xargs` 管道更干净 (3认同)
  • 我认为使用 `-delete` 或 `-exec rm '{}' \;` 比使用 `xargs -0` 更容易出错:`-delete` 依赖于位置,因此您可能会无意中删除超出预期的数量并且 `-exec rm '{}' \;` 没有指定它如何处理不寻常的文件名。 (2认同)

cup*_*kob 1

这里:

find . -type f -name *.bak -size -20M -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

您正在-name *.bak查找扩展名为“bak”的文件,-type f正在查找文件(不是目录),-size -20M为您提供所有小于 20MB 的文件(-size +20M用于反向搜索大于 20MB 的文件),并且-exec您正在删除此搜索的结果。