如何在目录及其子目录中的每个文件上运行bash脚本?

时间:2015-09-16 15:50:42

标签: bash

我有这个bash脚本:

#!/bin/bash
    if [ $(egrep -c "(% url+ )([0-9a-z_:]+)" 'test.txt') -gt 2 ]; then
        echo true 
        exit 1
    else
        echo false 
        exit 0
    fi

我正在test.txt上测试它,但是如何在目录及其子目录中的每个文件上运行它?如果我尝试这样的事情:

#!/bin/bash
    if [ $(egrep -c "(% url+ )([0-9a-z_:]+)" '~/Documents/somefolder/targetfolder/') -gt 2 ]; then
        echo true 
        exit 1
    else
        echo false 
        exit 0
    fi

它显然不起作用并给我下一个输出:

egrep: ~/Documents/somefolder/targetfolder/: No such file or directory
./run.sh: line 2: [: -gt: unary operator expected
false

那么如何在目录中的每个文件上运行我的脚本,即使它位于子目录中?

2 个答案:

答案 0 :(得分:1)

您应该可以使用find

执行您的操作
find . -type f -exec script.sh {} \;

空格,尾部反斜杠和分号都很重要。此find命令查找或以下的所有文件。然后对每个文件执行script.sh传递它作为参数运行的当前文件。例如,以下命令将通过在每个文件上运行wc命令为您提供层次结构中每个文件的字数:

find . -type f -exec wc {} \;

答案 1 :(得分:0)

当前的问题是~不会在引号内扩展。