我正在尝试建立一个条件语句来搜索特定大小的文件(在本例中为 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,您可以使find
和mapfile
以空分隔,但如果您将它们输出为换行符分隔的列表,则没有太大好处。
答案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
并将结果放入变量中,然后如果变量包含任何内容,则将其保存到日志文件中。