目标:检查是否存在包含今天日期的备份 .tgz 文件;输出 1 表示 OK,0 表示没有文件。
我是一个班轮的傻瓜:) 例如在 PHP 中(在 Javascript 中非常相似),在各种情况下我喜欢做类似的事情
<?php
echo (date("d")==1)?"Monday":"Not Monday";
?>
Run Code Online (Sandbox Code Playgroud)
Bash 中是否有类似的语法?我知道如何使用 -f FILENAME 检查常规文件的存在,我只希望命令打印 1 或 0 :)
Kiw*_*iwy 30
你可以简单地这样做:
#to check if it's a regular file
[ -f "/you/file.file" ] && echo 1 || echo 0
#to check if a file exist
[ -e "/you/file.file" ] && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)
在shell中这个字符[表示测试, -e如果文件存在]则测试结束&&如果命令返回真则执行命令之后,||如果命令返回假执行命令之后。
这应该适用于shell和bash
小智 17
if [ ! -f /tmp/foo.txt ]; then echo "File not found!"; else echo "file found"; fi
Run Code Online (Sandbox Code Playgroud)
zsh:(){echo $#} *"$(date +%Y-%m-%d)"*.tgz(DN)
Run Code Online (Sandbox Code Playgroud)
将输出当前目录中名称包含 YYYY-mm-dd 格式的当前日期并.tgz以十进制数结尾的文件数。如果您只想要 0 或 1,请替换(DN)为(DN[1])。
要在if语句中用作条件,您可以执行以下操作:
if ()(($#)) *"$(date +%Y-%m-%d)"*.tgz(DN); then
echo found
else
echo none found
fi
Run Code Online (Sandbox Code Playgroud)
bash等价物可能是:
(shopt -s nullglob dotglob; set -- *"$(date +%Y-%m-%d)"*.tgz; echo "$#")
Run Code Online (Sandbox Code Playgroud)
(替换"$#"用"$(($#>0))"得到0或1)。
和
if (shopt -s nullglob dotglob; set -- *"$(date +%Y-%m-%d)"*.tgz; (($#))); then
echo found
else
echo none found
fi
Run Code Online (Sandbox Code Playgroud)
ksh93:(FIGNORE='@(.|..)'; set -- ~(N)*"$(date +%Y-%m-%d)"*.tgz; echo "$#")
Run Code Online (Sandbox Code Playgroud)
和
if (FIGNORE='@(.|..)'; set -- ~(N)*"$(date +%Y-%m-%d)"*.tgz; (("$#"))); then...
Run Code Online (Sandbox Code Playgroud)
ls -qA | grep -c "$(date +%Y-%m-%d).*\.tgz$"
Run Code Online (Sandbox Code Playgroud)
为计数。
ls -qA | grep -q "$(date +%Y-%m-%d).*\.tgz$"; echo "$(($? == 0))"
Run Code Online (Sandbox Code Playgroud)
对于 0 或 1 并且:
和:
if ls -qA | grep -q "$(date +%Y-%m-%d).*\.tgz$"; then...
Run Code Online (Sandbox Code Playgroud)
虽然普遍的智慧是不解析ls, 在这里 with的输出-q,但我们确保每行有一个文件,并且不可打印字符的替换?不应影响grep我们模式的ing 所以它应该是相对安全的。
如果文件名包含不构成有效字符的字节序列,您可能会看到差异。一个优点是,如果当前目录不可读,您将收到一条错误消息。
你可以使用这个命令:
test -e *$(date).tgz && echo 1 || echo 0
Run Code Online (Sandbox Code Playgroud)