如何编写脚本来对目录和子目录运行 stat 命令并仅打印最近的文件

如何编写脚本来对目录和子目录运行 stat 命令并仅打印最近的文件

如何查找目录中最新的文件?我的脚本给出了目录中最新文件的一些额外输出。

#!/bin/bash
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
 (stat -c %y  "$directory"/* | tail -n 1)
done
 for D in "$entry"
 do
 (ls -ltr "$D" | tail -n 1)
done

电流输出:

2018-02-19 12:24:19.842748830 -0500
2018-02-19 12:24:19.842748830 -0500
2018-02-19 12:24:19.842748830 -0500
-rw-r--r-- 1 root root 0 Feb 19 12:19 test3.xml

我的目录结构如下

$ pwd
/nfs/test_library/myfolder/test

$ ls -ltr test
1.0  2.0  3.0

$ ls -ltr 1.0
test1.xml
$ ls -ltr 2.0
test2.xml
$ ls -ltr 3.0
test3.xml(which is the most recent file)

所以我必须让脚本仅用于打印test3.xml

答案1

我能够通过以下方式完成我相信您想要的事情:

GNUstat

read -rp "Please type in the directory you want all the files to be listed" directory
if [ -d "$directory" ]; then
    find "$directory" -type f -exec stat --printf='%Y\t%n\n' {} \; | sort -n -k1,1 | tail -1
else
    echo "Error, please only specify a directory"
fi

BSDstat

read -rp "Please type in the directory you want all the files to be listed" directory
if [ -d "$directory" ]; then
    find "$directory" -type f -exec stat -F -t '%s' {} \; | sort -n -k6,6 | tail -1
else
    echo "Error, please only specify a directory"
fi

这将递归地查找指定目录中的所有文件。然后,它将使用 UNIX EPOCH 时间戳格式的修改时间戳来统计它们。然后它根据这个时间戳字段对它们进行排序。最后它只打印最后的结果(最近更新的文件)。

相关内容