Bash:查找文件名以字符串开头的最新N个文件

时间:2017-05-11 17:06:27

标签: bash

我知道如何找到N个最新文件,

ls -latr | tail -n32

我知道如何找到以某个字符串开头的N个文件名,

ls filestring* | tail -n32

但我想找到五十个最新文件,其文件名以字符串开头。

2 个答案:

答案 0 :(得分:1)

以下要求GNU findsort,但适用于所有可能的文件名(包括带换行符的名称),以及以给定前缀开头的文件数不对的目录。适合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 #3Why you shouldn't parse the output of ls(1)

答案 1 :(得分:0)

ls -lt fileprefix* | head -32

没有必要反向排序和尾巴。