我到处寻找一个有效的答案,但我还是被卡住了。我刚开始抨击脚本,过去几天我一直在努力实现我的目标,但我却失去了理智。
目标:我想运行一个脚本,检查包含昨天日期的目录(日期显示在目录名的其他文本之间(。听起来很简单!
到目前为止我所拥有的:
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没有像我预期的那样工作。如果我将$DATE替换为例如:2022,我会得到一个结果。感谢您的帮助、指导和建议。
编辑:以下作品: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
我看不出有什么令人信服的理由使用grep。我会简单地使用一个显式循环:
directories_found=0
for entry in *$(date -d '1 day' +%y%m%d)*
do
if [[ -d $entry ]]
then
((directories_found++))
fi
done
echo Number of matching directories: $directories_found
您可以简单地使用ls -d startsWith*
并检查output is empty
是否如下:
#!/bin/bash
dirsStartingWith="/path/to/dir/*$(date -d '1 day ago' +%y%m%d)*"
if [[ $(ls -d $dirsStartingWith 2>/dev/null) ]]; then
echo "there are folders starting with $dirsStartingWith"
#ls -d $dirsStartingWith # to test output
else
echo "no folders starting with $dirsStartingWith found"
fi
第页。S.你也可以使用find
,但我认为ls
应该足够了,因为date
包含在文件夹的名称中。