gpt4 book ai didi

linux - 查找前 500 个最旧的文件

转载 作者:太空狗 更新时间:2023-10-29 12:32:54 29 4
gpt4 key购买 nike

如何找到最旧的 500 个文件?

我尝试过的:

find /storage -name "*.mp4" -o -name "*.flv" -type f | sort | head -n500

最佳答案

使用 GNU 查找和 GNU 排序查找最旧的 500 个文件:

#!/bin/bash
typeset -a files
export LC_{TIME,NUMERIC}=C
n=0

while ((n++ < 500)) && IFS=' ' read -rd '' _ x; do
files+=("$x")
done < <(find /storage -type f \( -name '*.mp4' -o -name '*.flv' \) -printf '%T@ %p\0' | sort -zn)

printf '%q\n' "${files[@]}"

更新 - 一些解释:

正如 Jonathan 在评论中提到的那样,处理此问题的正确方法涉及许多非标准功能,这些功能允许生成和使用以 null 分隔的列表,以便可以安全地处理任意文件名。

GNU 发现的 -printf生成 mtime(使用未记录的 %T@ 格式。我的猜测是这是否有效取决于您的 C 库)后跟一个空格,然后是文件名以 \0 结尾.两个额外的非标准功能处理输出:GNU 排序的 -z选项,以及 read内置的 -d选项,它带有一个空的选项参数来分隔空值的输入。整体效果是有sortfind 产生的 mtime 对元素进行排序的 -printf字符串,然后使用 IFS 将前 500 个结果读入数组拆分read的空间输入并将第一个元素丢弃到 _ 中变量,只留下文件名。

最后,我们使用 %q 打印出数组格式只是为了明确地显示结果,并保证每行一个文件。

进程替换(<(...) 语法)并非完全必要,但避免了在缺少 lastpipe 的版本中由管道引入的子 shell。选项。如果您决定使脚本比仅仅打印结果更复杂,这可能是一个优势。

这些功能都不是 GNU 独有的。所有这些都可以使用例如完成AST find(1) , 开放系统 sort(1) ,以及 Bash、mksh、zsh 或 ksh93(v 或更高)。不幸的是 find格式字符串不兼容。

关于linux - 查找前 500 个最旧的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664982/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com