【问题标题】:How can I best search for directories that contain a specific subdirectory OR a specific file?如何最好地搜索包含特定子目录或特定文件的目录?
【发布时间】:2015-02-07 20:09:10
【问题描述】:

我需要在庞大的目录结构上执行搜索并输出不包含特定子目录(在本例中为“主目录”)或包含任何 .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”的方法,但我做不到。有人有什么想法吗?

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

【问题讨论】:

  • 你确定吗, find 命令导出文件列表为\' not /`

标签: bash search grep find


【解决方案1】:

我还没有尝试过运行它,但在本地我会做这样的事情

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

您可以将字符串 master 替换为您想要排除的任何内容

由于您在问题中提到您只需要 level1 文件夹,您就可以使用 AWK 命令

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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 我刚试过这个字符串,但它返回错误egrep: infile: no such file or directory
    • 您可能需要添加更多关于其工作方式/原因的说明。事实上,这并不能真正回答问题。
    • 无论内容如何,​​上面的字符串都会打印每个父目录7-12次。
    • 感谢您的帮助 BMW - 但是现在第一个字符串只是打印顶级目录,第二个字符串在我尚未能够破译的目录旁边添加一个数字。我认为它与“a[i]”有关,但我可能是错的。
    【解决方案3】:
    for topdir in */
    do [ "`find $topdir \( -name Master -o -name \*.wav \) -print -quit`" ] || echo $topdir
    done
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多