我知道如何找到N个最新文件,
ls -latr | tail -n32
我知道如何找到以某个字符串开头的N个文件名,
ls filestring* | tail -n32
但我想找到五十个最新文件,其文件名以字符串开头。
答案 0 :(得分:1)
以下要求GNU find
和sort
,但适用于所有可能的文件名(包括带换行符的名称),以及以给定前缀开头的文件数不对的目录。适合ARG_MAX
:
#!/usr/bin/env bash
files=( )
counter=32
while IFS= read -r -d ' ' timestamp &&
IFS= read -r -d '' filename &&
(( --counter >= 0 )); do
files+=( "$filename" )
done < <(find "$dir" -type f -printf '%T@ %p\0' | sort -zgr)
declare -p files ## print the generated array of filenames
-printf '%T@ %p\0'
使用UNIX时间戳(seconds-since-epoch)打印每个结果;空间;文件名;然后是NUL。sort -z
告诉sort
使用NUL(与换行符不同,它不能存在于文件名中)来分隔输入和输出记录。IFS= read -r -d ' ' timestamp && IFS= read -r -d '' filename
将给定记录中的内容读取到变量timestamp
中,并将下一个NUL中的所有内容读入变量filename
。有关根据元数据对文件进行排序或比较的讨论,请参阅BashFAQ #3,Why you shouldn't parse the output of ls(1)。
答案 1 :(得分:0)
ls -lt fileprefix* | head -32
没有必要反向排序和尾巴。