如何根据时间过滤一部分文件?

How do I filter down a subset of files based upon time?

假设我做了很多工作,将目录中的文件列表缩减为我感兴趣的 10 个文件。有数百个文件,我终于找到了我需要的文件。

我可以输出结果(从 ls 输出),或者我可以说我有一个包含这些值的数组(在脚本中执行此操作)。没关系。

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

我们可以使用 find -mtime 1 这样的工具,这很好。但是我们如何处理目录中的文件子集呢?我们可以通过 xargs 将子集传递给 find 吗?

我可以用 for 循环很容易地做到这一点。但是我很好奇你们这些聪明人是否知道单线。

如果它们在数组中:

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

如果通过管道输入:

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

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

如果任何项目是目​​录并且您不想在其中搜索,请添加 -maxdepth 0 以禁用 find 的递归。

另一个不会递归的选项,不过如果我是你的话我会使用 John 的 find 解决方案。

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

stat 将打印数组中文件的名称和创建日期。
sed "greps" 您想要的日期并在打印文件名之前去除日期信息。