如何跟踪最近 4 个修改的文件?

如何跟踪最近 4 个修改的文件?

我觉得我错过了一些非常简单的东西,我想知道是否可以播种最后 4 个修改文件的最后几行。我尝试过这样的事情

tail | ls -lt | head -5

但我认为我应该迭代ls | -lt结果并将 tail 应用于它,但我不知道该怎么做。任何帮助表示赞赏

答案1

在开始之前,通常认为将 的输出用作ls其他内容的输入是不好的做法;一个常见的缺陷是,对于名称中包含空格/换行符的文件,它可能无法按预期工作。

考虑到这一限制,您可能会发现ls | something大多数情况下都可以正常工作。

您的命令正朝着正确的方向前进,这是一种解决方案,其中包含上述ls限制:

ls -t | head -5 | xargs tail

如果列表中存在子目录,这将引发非致命错误。

答案2

zshshell 中,可以通过 globbing 模式获取当前目录中最近修改的四个常规文件

./*(.Dom[1,4])

... 其中./*匹配当前目录中的所有名称,括号修改匹配的行为。比赛顺利.进行*仅有的常规文件,同时D使其也匹配隐藏名称(与shelldotglob中启用的 shell 选项一样bash)。om按修改时间戳对结果名称列表进行排序,并挑选出[1,4]前四个名称。

要调用tail这些文件:

tail ./*(.Dom[1,4])

bash外壳:

zsh -c 'tail ./*(.Dom[1,4])'

如果您想考虑当前目录或其下任何位置的所有文件,请使用

zsh -c 'tail ./**/*(.Dom[1,4])'

当启用 shell 选项时,该**模式的工作方式与相同的通配模式类似,即它递归地向下匹配到子目录。 in glob 限定符将使匹配到具有隐藏名称的子目录。bashglobstarD**

答案3

也许这会对你有帮助

find . -type f -mmin -5 -ls | tail -4

代替. => 添加您的目标目录路径

上面的命令将为您提供 5 分钟前最后修改的文件,如果需要,您可以将最后修改的分钟数从 5 分钟增加到您需要的值eg: 15min , 20min , 60min

答案4

如果没有子目录,那么即使文件名称中有空格,这也应该有效。但是,如果文件名称中包含换行符,则会失败。

ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

不幸的是,如果有子目录,它就会失败。如果有,那么这应该有效

find . -type f -maxdepth 1 -print0 | xargs -0 ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

相关内容