查找特定日期范围内目录中最大的文件

查找特定日期范围内目录中最大的文件

我正在寻找一个 UNIX 命令或一组命令,通过它我可以根据特定的日期范围找到目录中 20 个最大的文件。

为此,我想我可以通过触摸几个文件,然后根据这些文件日期进行查找来设置日期范围。 IE

touch /tmp/point.start -d "2018-06-01 00:00"
touch /tmp/point.end -d "2018-06-30 00:00"

然后运行

find . -newer /tmp/point.start ! -newer /tmp/point.end

为了从目录中获取我打算运行的最新 20 个文件,

ls -ltr | sort -nk5 | tail -20

但我似乎无法将两者结合起来

find . -newer /tmp/point.start ! -newer /tmp/point.end | ls -ltr | sort -nk5 | tail -20

只是忽略第一部分并列出目录中 20 个最大的文件,无论大小如何。我确信我错过了一些非常明显的东西,但我不知道是什么!

(我使用的是 RedHat 5.3,并且无法访问 newermt)

答案1

如果您可以-printf与您的find

find . -newer /tmp/point.start ! -newer /tmp/point.end -printf '%s %p\n' | 
  sort -rn | head -20

答案2

zsh

autoload age # best in ~/.zshrc if you use that often
ls -ldS -- *(De:age 2018-06-01 2018-06-30:OL[1,20])
  • -S: 按大小排序。使用 GNU ls(如 RedHat 5.3 上所示),您可以使用-U不排序,因为zsh已经使用OL.
  • (...): 全局限定符
  • D:不要忽略点文件。
  • e:code:评估代码来决定是否选择文件
  • age date1 date2:对于 mtime 在该范围内的文件返回 true(没有时间部分,默认为 00:00:00)
  • OL:按长度(大小)反向排序
  • [1,20]: 只选择前20个。

答案3

尝试这个,

find . -newer /tmp/point.start ! -newer /tmp/point.end  ! -path . | xargs ls -ltr | sort -nk5 | tail -20
  • xargs 从标准输入构建并执行命令行

相关内容