命令行 条件查找输出丢失

分享于 

2分钟阅读

ubuntu

 

问题:

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


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" - 它永远是 true。 在任何情况下,重定向 >/location/sub/int/large_file_audit.txt 不会神奇地选取前面命令的标准输出,因此总是创建一个空文件。

可以能最接近于Bash的方法是将 find的结果放入 array,然后测试它是否具有任何元素:


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



if (( ${#files[@]> 0 )); then 


 printf '%sn'"${files[@]}">/location/sub/int/large_file_audit.txt


fi



这不能适当地处理包含换行的文件名,可以使 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 并将结果放入变量中,如果变量包含任何保存到日志文件中的内容。



COM  COMM  Comma  命令行  OUT  FIND  
相关文章