unix 如何使用'find'来搜索在特定日期创建的文件?[已关闭]

juzqafwq  于 2022-11-04  发布在  Unix
关注(0)|答案(9)|浏览(185)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site相关,您可以留下评论,说明在何处可以找到此问题的答案。
9年前就关门了。
Improve this question
如何使用UNIX命令find搜索在特定日期创建的文件?

k5hmc34c

k5hmc34c1#

正如Max所指出的,你不能,但是检查修改或访问过的文件并不是那么难。我写了一个关于这个的tutorial,直到今天。它的本质是使用-newerXY! -newerXY
示例:要查找在2007年6月7日修改的所有文件:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

要查找在2008年9月29日访问的所有文件,请执行以下操作:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

或者,在同一天更改了权限的文件:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

如果您不更改文件的权限,则“c”通常对应于创建日期。

6ljaweal

6ljaweal2#

使用此命令搜索/home/上的文件和文件夹根据您的需要添加一个时间段:

find /home/ -ctime time_period

时间段示例:

  • 30多天前:-ctime +30
  • 不到30天前:-ctime -30
  • 恰好30天前:-ctime 30
8fq7wneg

8fq7wneg3#

这是两个步骤,但我喜欢这样做:
首先创建一个具有特定日期/时间的文件。在本例中,该文件为2008-10-01午夜

touch -t 0810010000 /tmp/t

现在,我们可以找到所有的文件是新的或旧的以上文件(按文件修改日期)。
您还可以使用**-anewer表示已访问的文件状态,使用-cnewer**表示已更改的文件状态。

find / -newer /tmp/t
find / -not -newer /tmp/t

您还可以通过使用touch创建两个文件来查看特定日期之间的文件

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

这将查找两个日期和时间之间的文件

find / -newer /tmp/t1 -and -not -newer /tmp/t2
waxmsbnn

waxmsbnn4#

您可以这样做:

find ./ -type f -ls |grep '10 Sep'

示例:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
shstlldc

shstlldc5#

你不能。-c开关告诉你权限最后一次更改的时间,-a测试最近的访问时间,-m测试修改时间。大多数Linux版本(ext 3)使用的文件系统不支持“创建时间”记录。对不起!

x7rlezfr

x7rlezfr6#

@Max:关于创作时间的说法是对的。
但是,如果要计算-atime-ctime-mtime参数之一的已用天数参数,则可以使用以下表达式

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

将“2008-09-24”替换为所需的任意日期,ELAPSED_DAYS将设置为从那时到今天之间的天数。(更新:从结果中减去1以与find的日期舍入对齐)。
因此,要查找在2008年9月24日修改的任何文件,命令应为:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

如果您的find版本不支持@Arve:的答案中提到的-newerXY predicate ,这将起作用。

bbuxkriu

bbuxkriu7#

通过使用-atime、-ctime和-mtime开关查找,您可以接近您想要实现的目标。

pwuypxnk

pwuypxnk8#

cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
n9vozmp4

n9vozmp49#

我在一个脚本中发现了这个脚本,该脚本删除所有超过14天的文件:

CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n "." >> $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG

我认为一点额外的“man find”和查找-ctime / -atime等参数将在这里对您有所帮助。

相关问题