我想根据文件名中的日期来tar文件,但是如果文件不存在,tar会创建一个空的tar文件
我有anychar_20180322_anychar的文件
anychar_20180322_anychar.txt
anychar_20180322_anychar.txt
anychar_20180322_anychar.txt
anychar_20180322_anychar.txt
我想tar那些文件,但在此之前我想检查目录中是否存在文件。
示例 - 在以下示例中,没有20180319的文件。但你可以在其中看到一个tar文件。
tar: /tmp/dir/*20180319*: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous erro
RS
-rw------- 1 user group 16M Apr 3 05:31 20180322.tar.gz
-rw------- 1 user group 45 Apr 3 05:31 20180319.tar.gz
以下代码:
d=$(date -d"10 days ago" +%s)
dt="$(date -d@$((d - i * 86400)) +%Y%m%d)"
if [ "$dt" -lt "$d" ] && [ test -f "*$dt*" ]; then
tar czf $fn *$dt*
fi
done
如何检查特定日期中存在的至少一个文件并继续执行tar,否则进入另一个日期。
答案 0 :(得分:0)
在shell脚本中执行操作之前,我使用以下代码检查文件是否存在:
# Test file
if [ -f /path/to/file/$FILENAME ]; then
# do something
else
echo "file not found"
fi
答案 1 :(得分:0)
if [ "$dt" -lt "$d" ] && [ test -f "*$dt*" ]...
test
或[]
但不是两个
用于扩展,没有双引号宽度
它应该更好:
if [ "$dt" -lt "$d" ] && [ -f *"$dt"* ]; then
...
答案 2 :(得分:0)
您可以使用:
d=$(date -d"10 days ago" +%s)
dt="$(date -d@$((d - i * 86400)) +%Y%m%d)"
if [ "$dt" -lt "$d" ]; then
for f in *"$dt"*; do # Iterate through everything the glob expands to
if ! [ -f "$f" ]; then # check whether it exists - if glob finds nothing, the glob itself is returned
exist=0
else
exist=1
fi
break # Don't waste time looping through everything...
done
if [ $exist -ne 0 ]; then
tar czf "$fn" *"$dt"*
fi
fi
(你的样本是一个额外的循环内部,有一些复制粘贴错误......)