我一直在彻底寻找这个但没有成功。我需要在 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
方法将查看符号链接本身的时间戳,而zsh
的before
函数查看它们指向的文件。您可以添加-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