linux 如何检查find命令是否没有找到任何内容?

2cmtqfgy  于 2023-01-04  发布在  Linux
关注(0)|答案(6)|浏览(201)

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

for i in `find $something`; do (...) done

但是我想使用带有“if”的find命令。
我正在尝试创建有关脚本删除的文件的进度注解(稍后创建日志文件)。我需要检查

find /directory/whatever -name '*.tar.gz' -mtime +$DAYS

找到的东西或没有。如果没有,我想说回声'你没有文件老于$天天'或类似的东西;)
我怎样才能在shell脚本中做到这一点?

0mkxixxg

0mkxixxg1#

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

lines=$(find ... | wc -l)
if [ $lines -eq 0 ]; then
...
fi
4szc88ey

4szc88ey2#

要在一个if条件中使用find命令,您可以尝试以下一行:

[[ ! -z `find 'YOUR_DIR/' -name 'something'` ]] && echo "found" || echo "not found"

使用示例:

[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

或者,可以使用-n代替! -z,例如:

[[ -n `find $dir -name $filename` ]] && echo found

man test开始:

-n STRING
       the length of STRING is nonzero
9jyewag0

9jyewag03#

用find函数退出0很容易,而退出〉0则比较困难,因为这通常只会在出错时发生。

if find -type f -exec false {} +
then
  echo 'nothing found'
else
  echo 'something found'
fi
7xllpg7q

7xllpg7q4#

如果可能的话,我想在一行中完成这一操作,但是找不到一种方法来让find更改其退出代码而不导致错误。
但是,根据您的具体要求,以下方法应该可以起作用:

find /directory/whatever -name '*.tar.gz' -mtime +$DAYS | grep 'tar.gz' || echo "You don't have files older than $DAYS days"

其工作原理是将find的输出传递给grep,如果没有找到任何东西,则返回失败退出代码,如果找到了,则返回成功并回显找到的行。
||之后的所有命令只有在前面的命令失败时才会执行。

nxagd54h

nxagd54h5#

这对我很有效

if test $(find . -name "pattern" | wc -c) -eq 0
then
    echo "missing file with name pattern"
fi
bfnvny8b

bfnvny8b6#

如果文件名中包含空格,那么对find的输出进行迭代可能会有危险,如果你确定没有空格,你可以将find的结果存储到一个数组中,然后检查它的大小,看看是否有匹配的结果:

results=( $(find -name "$something") )
if (( ${#results[@]} )) ; then
    echo Found
else
    echo Not found
fi
for file in "${results[@]}" ; do
   # ...
done

相关问题