![查找一天中某个时间修改的文件?](https://linux22.com/image/1542305/%E6%9F%A5%E6%89%BE%E4%B8%80%E5%A4%A9%E4%B8%AD%E6%9F%90%E4%B8%AA%E6%97%B6%E9%97%B4%E4%BF%AE%E6%94%B9%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我只需要查找在办公时间编辑的所有文件,因为晚上电脑可以用于自由职业。有没有办法搜索创建/修改的时间,而不管日期如何?我有 Windows 和 Linux 系统。
答案1
是的,您可以使用名为的免费软件搜索任何程序/文件的修改日期搜索一切。但是,您需要单击程序中的日期/时间列并手动查看。遗憾的是,没有程序可以为您执行此操作。希望这能有所帮助。- 阿芙罗狄蒂
答案2
Linux 解决方案。
有类似的问题。 基于我的答案在那里我想出了一个通用的 Bash 脚本来解决这类问题。您将在下面找到代码。将其保存到名为findt
(或其他) 的文件中chmod a+x findt
。将其放在您$PATH
要指向的位置或其他地方 - 我假设您知道基础知识、区别等。
调用findt -h
来学习语法。摘录:
用法
`findt [OPTION]... FROM TO [ARG]...`
概要
调用
find
命令列出在FROM
和之间TO
(含)修改、更改或访问的对象(文件、目录等)。FROM
和TO
是以 24 小时HH:MM
或H:MM
格式(00:00
-23:59
)给出的时间。 修改日期(天)无关紧要。 如果FROM
晚于TO
,则间隔包括午夜。选项
`-h` print this help and exit `-m` use mtime (default) `-c` use ctime `-a` use atime (note: understand `noatime` mount option etc.) `-b` use birth time, `stat -c %w` (useless, see `https://unix.stackexchange.com/a/91200`)
如果指定了多个
?time
,则只有最后一个才有效。`-p` use `-print` with `find` (default) `-0` use `-print0` instead `-d` use `-delete` with `find` (non-POSIX)
-d
除非也使用-p
或 ,否则保持沉默。-0
耐药基因
以下参数
TO
将作为其初始参数传递给find
。在此指定路径和附加测试(例如-type f
)。
大部分代码用于解析命令行、打印帮助等。脚本的工作部分是find
调用。这是来自的略微通用的解决方案我已经提到的答案。那里已经解释过了,所以我就不再重复了。
除非您使用,否则该工具只会打印名称-d
。请注意,它使用HH:MM
纯文本stat -c %y
等,忽略时区信息;如果涉及不同的时区,则可能需要调整解决方案。
对于你的情况你应该运行如下命令:
findt 8:00 15:59 /path/to/dir -type f
这是代码:
#!/usr/bin/env bash
set -e
myname="${0##*/}"
from=-1
to=-1
property=%y
is_print=0
is_zero=0
is_delete=0
post_args=""
conj=-a
main() {
while [ "${1:0:1}" = "-" ]; do
options="${1:1}"
shift
while [ ${#options} -ne 0 ]; do
case "$options" in
h*)
print_help
exit 0;;
m*)
property=%y;;
c*)
property=%z;;
a*)
property=%x;;
b*)
property=%w;;
p*)
is_print=1;;
0*)
is_zero=1;;
d*)
is_delete=1;;
*)
print_error;;
esac
options="${options:1}"
done
done
from=`parse_time "$1"`
to=`parse_time "$2"`
shift 2
[ $from -gt $to ] && conj=-o
[ $is_delete -eq 0 ] && is_print=1
[ $is_print -eq 1 ] && post_args="-print"
[ $is_zero -eq 1 ] && post_args="-print0"
[ $is_delete -eq 1 ] && post_args="$post_args -delete"
find "$@" -exec bash -c '\
hm=`stat -c $4 "$0" | cut -c 12-16`; [ "${#hm}" -eq 0 ] && exit 1 ; \
t=$((60*10#`echo $hm | cut -c 1-2`+10#`echo $hm | cut -c 4-5`)); \
test \( $t -ge $1 \) $3 \( $t -le $2 \)' \
{} $from $to $conj $property \; $post_args
}
parse_time() {
time_string="$1"
[ ${#time_string} -eq 4 ] && time_string="0$time_string"
[[ "$time_string" =~ ^[0-2][0-9]:[0-5][0-9]$ ]] || print_error
{ value=$((60*10#${time_string:0:2}+10#${time_string:3:2})); } 2>/dev/null || print_error
[ $value -ge 1440 ] && print_error
printf '%s' $value
}
print_error() {
cat >&2 << EOF
${myname}: error parsing command line
Try '$myname -h' for more information.
EOF
exit 1
}
print_help() {
cat << EOF
USAGE
$myname [OPTION]... FROM TO [ARG]...
SYNOPSIS
Invokes \`find' command to list objects (files, directories, ...) modified,
changed or accessed between FROM and TO (inclusive). FROM and TO are times given
in 24-hour HH:MM or H:MM format (00:00 - 23:59). Modification date (day)
does not matter. If FROM is later than TO then the interval includes midnight.
OPTIONs
-h print this help and exit
-m use mtime (default)
-c use ctime
-a use atime (note: understand \`noatime' mount option etc.)
-b use birth time, \`stat -c %w'
(useless, see https://unix.stackexchange.com/a/91200)
If more than one ?time is specified, only the last one matters.
-p use \`-print' with \`find' (default)
-0 use \`-print0' instead
-d use \`-delete' with \`find' (non-POSIX)
-d is silent unless -p or -0 is also used.
ARGs
Arguments following TO are passed to \`find' as its initial arguments.
Specify paths and additional tests (e.g. \`-type f') here.
EXAMPLES
To list objects in /tmp modified during working hours:
$myname 7:00 14:59 /tmp
To list and delete big files accessed late at night in /home/foo
$myname -apd 23:30 4:30 /home/foo -typef -size +640M
LICENCE
Creative Commons CC0.
EOF
}
main "$@"
答案3
您可以在Linux环境中尝试该命令。
到查找所有被修改的文件只有今天
find . -mtime -1 -print
touch -t `date +%m%d0000` /tmp/$$
find /tmefndr/oravl01 -type f -newer /tmp/$$
rm /tmp/$$