如何更改 bash 中星号 (*) 使用的文件排序方法?

如何更改 bash 中星号 (*) 使用的文件排序方法?

我正在尝试对目录中的所有文件运行命令,从具有最早修改日期的文件开始,到具有最新修改日期的文件结束。

我发现星号 ( *) 对于对目录中的所有文件运行命令很有用,如下所示:

$ stat -x *

但是按字母顺序对文件进行排序,有什么方法可以实现相同的功能,但从最早修改日期的文件开始?

编辑:我的意思是人类意义上的“最早”,最古老的文件。

答案1

假设使用 GNU 工具,你必须做类似的事情

find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p\0' | 
  sort -z -k1.1n |
  while IFS=$'\t' read -rd '' mtime name; do
    # do something with the filename
    echo ">>>$name"
  done

额外的箍用于处理任何可以想象的文件名,例如包含换行符的文件名。

为了将其封装在函数中,我会写:

files_by_mtime () { 
    local pattern=$1
    local -n arr=$2
    arr=()
    while IFS=$'\t' read -rd '' mtime name; do
        arr+=("$name")
    done < <(
        find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p\0' | sort -z -k1.1n
    )
}

files_by_mtime '*' myarr
for file in "${myarr[@]}"; do
    # do something with the filename
    echo ">>>$file"
done

所需的 bash 版本 4.3+

答案2

ls -tr将按照最早的修改时间对当前目录中的文件进行排序。

相关内容