查找或列出当前 DIR 中今天(00:00)之前创建的文件

查找或列出当前 DIR 中今天(00:00)之前创建的文件

我一直在彻底寻找这个但没有成功。我需要在 mac 中使用一个终端命令来检索今天 00:00 之前创建的当前目录(不包括子目录)中的文件列表。

系统:MacOS Catalina

谢谢一千,EG

答案1

find . ! -name . -prune ! -newermt 00:00

将报告今天早上 00:00 之前最后修改的文件(任何类型,包括目录)。

find . ! -name . -prune ! -newerBt 00:00

会报告文件出生今天早上 00:00 之前。

前者随着创建时间的变化而更具相关性。内容文件的名称,后者是文件生成的时间(尽管不一定是该名称,并且请注意,文件最初创建为空,稍后添加内容)。

这适用于 FreeBSD find,我想这也应该适用于 macOS,因为 macOS 实用程序通常基于 FreeBSD 。

zsh(使用修改时间):

autoload before
print -rC1 -- *(Ne[before 00:00])

对于符号链接,这些find方法将查看符号链接本身的时间戳,而zshbefore函数查看它们指向的文件。您可以添加-L选项来find获得与 中相同的行为zsh

POSIXly,你可以这样做:

touch -t "$(date +%Y%m%d0000)" ~/.today &&
  find -L . ! -name . -prune ! -newer ~/.today

答案2

一种非常简单的方法是使用该find实用程序,然后对要过滤的日期执行 grep。例如,假设您想要搜索所有文件修改的5月24日,你可以这样做:

$ find . -type f -ls | grep "May 24"

如果您只需要文件名而不需要完整的转储,您可以使用xargs

$ find . -type f -ls | grep -o "May 24.*" | awk '{print $4}' | xargs basename

请注意,当您使用 运行时find-ls您看到的时间就是文件修改时间而不是创建日期。

答案3

我输入“-d '9 天前'”来限制我的输出,并作为示例。显然,将其放入脚本中并清除诊断。我使用数组,因此 ls 只需运行一次。您可能会发现该数组对您的下一个过程也很有用。

Paul--) #.. Get a timestamp in touch format.
Paul--) Midnight="$( date -d '9 days ago' '+%Y%m%d0000.00' )"
Paul--) declare -p Midnight
declare -- Midnight="202005160000.00"
Paul--) #.. Make a reference file.
Paul--) touch -t "${Midnight}" refDate.tmp
Paul--) ls -l refDate.tmp
-rw-r--r-- 1 paul paul 0 May 16 00:00 refDate.tmp
Paul--) #.. Add olderThan Names to an array.
Paul--) for fn in *; do
    [[ -f "${fn}" && "${fn}" -ot refDate.tmp ]] &&
        Want+=( "${fn}" )
done
Paul--) echo Count ${#Want[@]}
Count 7
Paul--) #.. List the files.
Paul--) ls -ld "${Want[@]}"
-rw-r--r-- 1 paul paul    1014 May 14 18:03 Algorithm_2.txt
-rw-r--r-- 1 paul paul 1507999 May 14 23:15 Ram.1e12E
-r-------- 1 paul paul    1149 May 14 22:14 Ramanujan.array.V01
-r-------- 1 paul paul    1635 May 14 21:45 Ramanujan.sort.V01
-r-------- 1 paul paul    1773 May 14 10:38 Ramanujan.V06
-r-------- 1 paul paul    1747 May 15 19:12 Ramanujan.V07
-rw-r--r-- 1 paul paul    4183 May 14 23:44 Test.log
Paul--) #.. Tidy up.
Paul--) unset Want; rm -f refDate.tmp

相关内容