我正在尝试对目录中的所有文件运行命令,从具有最早修改日期的文件开始,到具有最新修改日期的文件结束。
我发现星号 ( *
) 对于对目录中的所有文件运行命令很有用,如下所示:
$ 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
将按照最早的修改时间对当前目录中的文件进行排序。