在Bash脚本中使用带有GREP的变量



我到处寻找一个有效的答案,但我还是被卡住了。我刚开始抨击脚本,过去几天我一直在努力实现我的目标,但我却失去了理智。

目标:我想运行一个脚本,检查包含昨天日期的目录(日期显示在目录名的其他文本之间(。听起来很简单!

到目前为止我所拥有的:

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包含在文件夹的名称中。

相关内容

  • 没有找到相关文章

最新更新