验证条件检查的目录路径(bash)

时间:2016-09-12 17:49:25

标签: linux bash command-line

现在,我有一个脚本,它使用以下命名方案每天创建一个新目录:

cur_date=$(date +"%m_%d_%y)
mkdir test_dir_$cur_date/

结果是:

test_dir_09_12_16
test_dir_09_13_16
test_dir_09_14_16
etc...
每天都过去了。

我尝试做的是进行条件检查以查看前一天目录是否存在,如果存在,请使用rsync将差异从前一天传输到新的一天目录。我的问题是,我现在确定如何执行条件来执行此操作。我知道

if [ -d test_dir_%m_%d-1_%y]

可能不是正确的语法,所以我希望提供以下内容:

if [ -d test_dir_(previous_day)]; then
   rsync -av test_dir_(previous_day) test_dir_$cur_date/
fi

将起作用,不会导致任何错误。 这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用前一天获取:

pd=$(date -d '-1 day' '+%m_%d_%y')

然后检查目录使用是否存在:

if [[ -d test_dir_${pd} ]]; then
   echo "exists"
   rsync -av "test_dir_${pd}" "test_dir_${cur_date}"
else
   echo "doesn't exist"
fi

答案 1 :(得分:1)

shell对日期算术一无所知。您需要再次调用date来获取昨天的日期。在一般情况下(通过新年或3月1日),没有简单的方法可以通过纯算术或字符串操作获得昨天的日期。

在Linux(GNU coreutils)系统上,date -d yesterday执行此操作。在* BSD(包括OSX)上,语法会略有不同。如果您需要同时处理两者,请编写包装器或使用脚本语言。