如何在if语句中使用bash的find参数?

时间:2018-01-20 17:03:48

标签: bash if-statement find

正如标题所说。我知道如何使用find的参数,但不知道在评估find返回变量时如何使用它们作为if语句。例如:

find . -type f

这显然找到了所有文件,以及我希望如何使用它:

ARRAY=$(find .)
for item in $ARRAY
do
if [[ -f $item ]] ; then

这也是一样的,它只处理查找中的文件。我显然知道如何使用-type参数,而不是其他参数。例如:

find . -size +512k

如果我想要大小,那么if [[ -size +512k $item ]]似乎没有按预期工作。我该如何使用它?

其他我无法弄清楚如何使用:

find . -executable
find . \( -name "*.html" -or -name "*.css" \)
find . -mtime +364

如果我循环查找结果,我如何在if语句中使用其中的每一项?

此外,我会如何在查找结果之后获取查找结果的总大小。假设我拥有ARRAY=$(find .)以及如何对du -ch变量执行$ARRAY。我该怎么做?

对不起,我是一个bash noob,它的语法对我来说很难。

2 个答案:

答案 0 :(得分:0)

find命令(它是一个独立程序,实际上不是Bash的一部分)与[[ ... ]]语法(内置于Bash中)之间确实没有任何关系。因此,find命令支持的选项不需要[[ ... ]]语法支持的对应项就不足为奇了。

有关[[ ... ]]语法支持的完整列表,请参阅 Bash参考手册§3.2.4.2 "Conditional Constructs"§6.4 "Bash Conditional Expressions"

测试"$foo"是否为可执行文件:

if [[ -x "$foo" ]] ; then

测试某些内容是否以.html.css

结尾
if [[ "$foo" == *.html ]] || [[ "$foo" == *.css ]] ; then

其他的并不那么容易,需要求助于stat等外部程序。

答案 1 :(得分:0)

这就是诀窍

find . -size +10k -exec bash -c 'f="$1"; if [ $(du -k "$f" | cut -f 1) -gt 100000 ]; then echo "$f" ;fi' _ {} ';'

借助这个答案:find -exec with multiple commands