使用 find 列出自特定日期以来未访问过的目录?

使用 find 列出自特定日期以来未访问过的目录?

使用该stat命令可以查看并格式化上次访问目录的日期。这adate

是否可以使用某种方式find查找在特定日期之前更改的目录?test

答案1

Shell脚本

find您可以仅使用、sedsort(以及echo“用法”部分)尝试以下 shell 脚本。find可以做 可以做的事情stat。唯一的区别是一个!字符,它否定了测试-newerat

olderdate:

#!/bin/bash

if [ $# -ne 2 ]
then
 echo "Usage:   $0 <reference date> <directory> "
 echo "Example: $0 2018-11-30 ."
 exit
fi

find "$2" -type d ! -newerat "$1" -printf "%AY-%Am-%Ad %AT  %p\n" |
 sed -e 's%\..*  /%     /%' \
     -e 's%\..*  \.%     .%' | sort

newerdate:

#!/bin/bash

if [ $# -ne 2 ]
then
 echo "Usage:   $0 <reference date> <directory> "
 echo "Example: $0 2018-11-30 ."
 exit
fi

find "$2" -type d -newerat "$1" -printf "%AY-%Am-%Ad %AT  %p\n" |
 sed -e 's%\..*  /%     /%' \
     -e 's%\..*  \.%     .%' | sort

您不仅指定日期,还指定时间,hours或者hours:minutes如果hours:minutes:seconds引用第二个参数,

./olderdate '2018-12-19 18' /path

关于“自动”修改访问时间的评论

我做了一些测试,并注意到在某些情况下findstat会修改搜索目录的访问日期和时间。当目录中的某些内容发生更改但目录本身的访问时间尚未更新时,似乎会发生这种情况。

在这些情况下,访问时间将设置为当前时间。但是,当findstat再次搜索目录时,访问日期和时间将保持不变(除非目录中再次更改了某些内容)。

答案2

您可以从以下内容开始:

MY_DATE="2018-12-19 06:30"
for i in $(find . -type d)
do
    if [[  $(date -d"$(stat $i | grep ^Access | tail -1 | awk '{print $2 " " $3}')" +%s) -gt $(date -d"$MY_DATE" +%s) ]]
    then
        echo $i
    fi
done

这不适用于路径中包含空格的目录。

该脚本只是循环遍历从运行它的位置找到的所有目录(您可以通过修改 find 命令来更改它)并在它们上运行 stat,将访问日期与 MY_DATE 变量中提供的日期进行比较。

答案3

这大约是对的吗?

$ cd ~

# adate for ./Pictures/
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400

# adate for ./Music/
$ stat -c %x ./Music/
2018-05-18 11:08:44.325743396 -0400

# Change das adate for ./Music/:
$ ls -la ./Music/
drwxr-xr-x. 2  leeand00 leeand00     6 May 18 2018  .
drwx------. 24 leeand00 leeand00  4096 Dec 11 09:54 .. 

# Read the adate for ./Music/ to see that it changed:
$ stat -c %x ./Music/
2018-12-19 23:35:04.789892164 -0500

# Read the adate from ./Pictures/ to see that it did not change:
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400

# Don't re-invent the wheel:
# `-type d` (look for folders only)
#
# `-maxdepth 1` (Only look inside this directory for folders, 
#                don't descend lower than that)
#
# `-amin -300` ()
#
$ find . -maxdepth 1 -type d -amin -300
.
./Music

相关内容