如何筛选下来基于时间的文件的一个子集?

问题描述 投票:1回答:2

假设我已经做了很多工作削下来的文件列表中的目录下的10个文件,我很感兴趣。有数百个文件,我终于找到了我需要的人。

我既可以管出这个(管道从ls)的结果,或我可以说我有这些值(脚本内这样做)的阵列。不要紧,无论哪种方式。

现在,该列表中,我想找到只昨天创建的文件。

我们可以像使用find -mtime 1工具,都很好。但是,我们会怎么做,随着文件的目录中的一个子集?我们可以通过一个子集,通过findxargs

我可以用for循环做到这一点很容易地。不过我很好奇,如果你聪明的人知道一个班轮的。

bash time scripting find ls
2个回答
3
投票

如果他们在一个数组:

files=(...)
find "${files[@]}" -mtime 1

如果他们被管道中:

... | xargs -d'\n' -I{} find {} -mtime 1

注意,第二个将用于这是有点低效率的每个文件运行一个单独的find命令。

如果任何项目是目​​录,你不希望他们的内部搜索,添加-maxdepth 0禁用find的递归。


1
投票

另一种选择,不会递归,虽然我只用约翰的find解决方案,如果我是你。

$: stat -c "%n %w" "${files[@]}" | sed -n "
     / $(date +'%Y-%m-%d' --date=yesterday) /{ s/ .*//; p; }"

stat将打印文件的名称和创建日期在数组中。 该sed“里grep”你想要的日期和剥离打印文件名前的最新信息。

© www.soinside.com 2019 - 2024. All rights reserved.