在同一文件夹树上调用多次查找

时间:2015-06-15 15:46:09

标签: linux bash shell unix find

我在同一组文件上多次运行find命令。我的find命令的结果通常是不相交的集合,AKA我正在运行find -mmin +35;找-mmin -25,并对结果做不同的事情。

在一次搜索时,多次搜索整个文件系统似乎有些愚蠢。有没有办法将多个“搜索参数”放入一个查找命令中,并根据它满足的参数将输出管道输送到另一个地方?

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

find . -mmin +35 -or -mmin -25

find支持多个逻辑运算符(-and,-or,-not)。有关详细信息,请参见手册页的“操作员”部分。

==================== 编辑:在回答有关处理两个匹配的问题时,我不知道如何直接使用find执行此操作。我个人会做的是像这样处理for循环中的输出(注意这是pesudo-code):

for f in `find . [condition 1] -or [condition 2]` ;do
    if [ f meets condition1 ]; then
        doSomething
    elif [ f meets condition2 ]; then
        doSomethingElse
    fi
done

我确信有很多bash guru可以做得更清洁,更有效率。

答案 1 :(得分:1)

您可以使用tee将输出复制到两个不同的子shell并以不同方式处理它。

find . -mmin +35 -or -mmin -25 | tee \
    >(while read f; do if [ $f meets condition1 ]; then; doSomething; done) \
    >(while read f; do if [ $f meets condition2 ]; then; doSomethingElse; done) \
    >/dev/null

这是阅读EJK答案后第一个想到的解决方案。

编辑:这是未经测试的。显示原理的工作示例如下:

echo -e "abc\ndef\nauv\nafg\ndtt" | tee >(grep -P '^a' > a.txt) >(grep -P '^d' > d.txt) >/dev/null