我正在寻找一个 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
: 按大小排序。使用 GNUls
(如 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
从标准输入构建并执行命令行