【发布时间】:2020-06-22 16:09:12
【问题描述】:
大家好,我正在尝试创建一个脚本来搜索在 X:00-X:59 之间修改的文件。 X 由用户给出。我试过这个:
echo "Give hour: "
read N
if [ N>=0 && N<=24 ]
then
find /home/mikepnrs -newermt "$N:00-59"
else
echo "Out of bounds!"
fi
有什么解决办法吗?
【问题讨论】:
大家好,我正在尝试创建一个脚本来搜索在 X:00-X:59 之间修改的文件。 X 由用户给出。我试过这个:
echo "Give hour: "
read N
if [ N>=0 && N<=24 ]
then
find /home/mikepnrs -newermt "$N:00-59"
else
echo "Out of bounds!"
fi
有什么解决办法吗?
【问题讨论】:
-newermt primary 不接受任何格式的时间范围。要选择在假设A-B 期间修改的文件,您需要两个-newermts;一个包含比A 更新的文件,另一个排除比B 更新的文件。
此外,还有两个边缘情况需要处理:
-newermt 的参数必须是昨天的 23:59:59。所以,我会这样做:
#!/bin/bash -
LC_COLLATE=C
read -rp 'hour ([0]0-23): ' hour
case $hour in
(0|00)
find /home/mikepnrs \
-newermt 'yesterday 23:59:59' \
! -newermt '00:59:59' ;;
(0[1-9]|1[0-9]|2[0-3])
find /home/mikepnrs \
-newermt "$((10#$hour-1)):59:59" \
! -newermt "$hour:59:59" ;;
(*)
printf 'invalid hour: %q\n' "$hour" >&2
exit 1
esac
【讨论】:
它不是这样工作的:newerXY 为您提供比特定时间戳新的文件,您只能给出一个条件(并且您想要其中两个,“比 X:00 新”和“比“X+1:00”。
我建议您使用 find 来查找“比 X:00 更新”的文件,并在查找的末尾使用 -ls,这会为您提供如下列表:
37436171902531110 0 -rw-rw-rw- 1 user group 0 May 24 15:56 ./blabla_002.jpg
2533274791505920 0 -rw-rw-rw- 1 user group 55 May 26 15:13 ./test.txt
28147497671070312 0 -rw-rw-rw- 1 user group 0 May 24 15:56 ./test_001.jpg
8162774324885354 0 -rw-rw-rw- 1 user group 25 Jun 17 10:22 ./try.txt
2533274791505920 0 -rw-rw-rw- 1 user group 55 May 26 15:13 test.txt
8162774324885354 0 -rw-rw-rw- 1 user group 25 Jun 17 10:22 try.txt
使用awk脚本,可以过滤掉太新的。
【讨论】: