#!/bin/bash
unset result
result=$(find /home -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"
在这/test
部分我实际上需要找到 2 个文件名。那些以 开头的E*
和那些以 开头的P_*
。这可以做到吗?
答案1
从人发现
退出状态
寻找如果所有文件均已成功处理,则以状态 0 退出;如果发生错误,则以大于 0 的状态退出。这是故意一个非常广泛的描述,但如果返回值非零,则不应依赖结果的正确性寻找
因此,如果没有匹配的文件,退出状态将保持 0。因此最好检查输出是否为空:
unset result
result=$(find ~/TestDir -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"
答案2
find $(find -name "[0-9][0-9][0-9][0-9]") -name "[test]*" -mtime -7 -exec rm -i {} \; || echo "There are no recovery files older than 7 days"
这||
(或者) 运算符查看左侧命令的结果,仅当左侧命令失败时(基于返回码)才运行右侧命令。
如果find没有找到任何匹配的文件,它将返回1,这将导致||
run运行该echo
命令。