如何才能最好地搜索包含特定子目录或特定文件的目录?

时间:2014-12-09 19:35:34

标签: bash search grep find

我需要在庞大的目录结构上执行搜索,并输出不包含特定子目录的顶级目录(在本例中为" master")或包含任何.wav文件的目录。

    001\Master\files.wav
    002\files.wav
    003\Admin\otherfiles.txt 

在这种情况下,我只需要将目录003打印到文件中。

我开始的字符串如下:

find . d -depth 2 \! -exec test -e '{}master' \; > folders.txt

这让我至少朝着正确的方向前进。

我也试过&运行两个并发的查找请求和grep来获取输出但到目前为止还没有工作。我也试图找到一种方法来使用grep -v'但我不能。有人有什么想法?

我甚至考虑编写一个脚本来处理搜索,进行初始查找,然后对输出执行第二次搜索,只给出我需要的那些目录。

3 个答案:

答案 0 :(得分:0)

我没有尝试过这个,但我会做这样的事情

find . -name "*.wav" $(printf "! -name %s " master)

您可以将字符串母版替换为您想要排除的内容

因为在您提出的问题中,您只需要level1文件夹即可使用AWK命令

find .  -name "*.wav" $(printf "! -name %s " master) | awk -F '/' '{print $2}'

答案 1 :(得分:0)

find . |egrep -i -v "\\\\master\\\\|wav$" | awk -F '/' '{print $2}' |sort -u

find . |egrep -i -v "\\\\master\\\\|wav$" | awk -F '/' '{a[$2]++}END{for (i in a) print i , a[i]}' |sort -u

答案 2 :(得分:0)

for topdir in */
do [ "`find $topdir \( -name Master -o -name \*.wav \) -print -quit`" ] || echo $topdir
done

如果您的find不知道-quit并抱怨invalid predicate `-quit',请删除-quit(该命令可能需要更长时间)。