如何查找目录中最新的文件?我的脚本给出了目录中最新文件的一些额外输出。
#!/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 时间戳格式的修改时间戳来统计它们。然后它根据这个时间戳字段对它们进行排序。最后它只打印最后的结果(最近更新的文件)。