【发布时间】:2022-10-17 01:06:23
【问题描述】:
我一直在寻找一个有效的答案,但我在这里,仍然卡住了。我是 bash 脚本的新手,过去几天一直在努力实现我的目标,但我却失去了理智。
目标:我想运行一个脚本来检查包含昨天日期的目录(日期出现在目录名称中的其他文本之间)。听起来很简单!
到目前为止我所拥有的:
DATE=$(date -d '1 day' +%y%m%d)
ls /path/to/folders > ~/listofdirs.txt
GREPDIR=$(grep $DATE ~/listofdirs.txt)
if [ -d /path/to/folders/$GREPDIR ]; then
echo "Dir exists!"
echo "(cat $GREPDIR)"
exit 1
else
echo "Nothing found."
fi
Grep 没有找到任何结果,因为我确信 $DATE 没有按我的预期工作。如果我用例如:2022 替换 $DATE,我会得到一个结果。感谢您的任何帮助,指导,建议。
编辑:以下作品:D
#!/usr/bin/env bash
#
dirsIncluding="$(date -d '-1 day' +%Y%m%d)"
dirs="/path/to/dir"
regex="*"
if [[ $(ls -d $dirs/$regex$dirsIncluding$regex 2>/dev/null) ]]; then
echo "Something found."
else
echo "Nothing found."
fi
【问题讨论】:
-
使用
bash -x yourscript查看它实际执行的跟踪日志。将该日志中的 grep 命令与您知道有效的命令进行比较。 -
也就是说,要查找具有给定日期范围的文件,您应该使用
find,而不是 greppingls的输出。 (一般来说,ls仅用于交互使用;它根本不应该用于脚本)。 -
请参阅 mywiki.wooledge.org/UsingFind#Searching_based_on_times 和
man find。 -
也许您在
DATE=$(date -d '1 day' +%y%m%d)中忘记了ago?因为它明天而不是昨天返回。昨天正确的是DATE=$(date -d '1 day ago' +%y%m%d)