条件查找输出缺失

条件查找输出缺失

我正在尝试建立一个条件语句来搜索特定大小的文件(在本例中为 1Gb)。

if [ "find /location/sub/int/ -size +1G" ]
then
  > /location/sub/int/large_file_audit.txt
fi

我运行这个程序并创建了一个文件,但是该文件是空的,我怎样才能将查找的结果填充到文件中?我做错了什么?

答案1

你的测试if [ "find /location/sub/int/ -size +1G" ]没有按你预期的方式进行,因为它测试了细绳 "find /location/sub/int/ -size +1G"- 永远都是这样。无论如何,重定向> /location/sub/int/large_file_audit.txt不会神奇地获取前一个命令的标准输出,因此总是会创建一个空文件。

在 Bash 中,最接近您意图的做法可能是将结果放入find数组中,然后测试它是否包含任何元素:

mapfile -t files < <(find /location/sub/int/ -size +1G)

if (( ${#files[@] > 0 )); then 
  printf '%s\n' "${files[@]}" > /location/sub/int/large_file_audit.txt
fi

这无法很好地处理包含换行符的文件名 - 使用较新版本的 bash,您可以使findmapfile以空分隔,但如果您将它们输出为换行符分隔的列表,则没有太大好处。

答案2

一个班轮解决方法:

find -size +10G | grep ".*" > file.log || (rm file.log; echo "Can't find anything")

或者:

find -size +10G | grep ".*" > file.log || rm file.log

请注意,find当文件由于任何原因未正确处理时,将返回 1(False),因此我建议使用类似以下内容:

#!/bin/bash
RESULTS=$(find /path -size +1G)
if [ -n "$RESULTS" ];
 then
   echo "$RESULTS" > /path/file.log
fi

首先运行find并将结果放入变量中,然后如果变量包含任何内容,则将其保存到日志文件中。

相关内容