如何检查find命令是否找不到任何东西(bash,openSUSE)?

Izz*_*zzy 13 linux bash suse find

我知道可以使用像这样的find命令循环

for i in `find $something`; do (...) done
Run Code Online (Sandbox Code Playgroud)

但是我想用"if"使用find命令.

我正在尝试通过我的脚本创建有关已删除文件的进度注释(以及稍后的日志文件).我需要检查一下

find /directory/whatever -name '*.tar.gz' -mtime +$DAYS
Run Code Online (Sandbox Code Playgroud)

找到了什么或不是.如果不是我想说回声'你没有比$ DAYS天更早的文件'或类似的东西;)

我怎么能在shell脚本中做到这一点?

Mar*_*ell 12

计算输出的行数并将其存储在变量中,然后测试它:

lines=$(find ... | wc -l)
if [ $lines -eq 0 ]; then
...
fi
Run Code Online (Sandbox Code Playgroud)


bac*_*chN 10

你想用查找命令里面if条件,你可以试试这个内胆:

 [[ ! -z `find 'YOUR_DIR/' -name 'something'` ]] && echo "found" || echo "not found"
Run Code Online (Sandbox Code Playgroud)

使用示例:

 [prompt] $ mkdir -p Dir/dir1 Dir/dir2/ Dir/dir3                 
 [prompt] $ ls Dir/
 dir1  dir2  dir3
 [prompt] $ [[ ! -z `find 'Dir/' -name 'something'` ]] && echo "found" || echo "not found"
 not found
 [prompt] $ touch Dir/dir3/something
 [prompt] $ [[ ! -z `find 'Dir/' -name 'something'` ]] && echo "found" || echo "not found"
 found
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用`!-z` 而不是 `-n`? (3认同)

小智 7

退出0很容易找到,而退出> 0则更困难,因为这通常仅在发生错误时发生。但是我们可以实现:

if find -type f -exec false {} +
then
  echo 'nothing found'
else
  echo 'something found'
fi
Run Code Online (Sandbox Code Playgroud)