【问题标题】:Know all path's to a folder inside folder using shell script or bat script使用 shell 脚本或 bat 脚本了解文件夹内文件夹的所有路径
【发布时间】:2026-02-12 09:45:01
【问题描述】:

我在桌面上有一个名为 A 的目录。

它具有以下层次结构:

A -> B -> C -> D

A -> Q -> W -> X -> D

A -> S -> D -> F

以上都是目录名称。我想知道目录A 中是否有一个名为D 的目录。在确保D 的存在后,我想知道从目录AD 的完整路径。

请在这方面帮助我。

【问题讨论】:

  • 如果是基于unix的操作系统,可以使用find命令。
  • 不,我在 Windows 上,在 git shell 中运行命令。它没有识别 find 命令。
  • @BarathVutukuri,你为什么不用Cygwin
  • 如果您要为bash 标记问​​题,我们通常会假设存在与bash 一起可用的标准工具。
  • @anishsane 删除了 bash 标签。很抱歉造成混乱*。

标签: windows shell batch-file git-bash


【解决方案1】:

我对 git-bash 一无所知。

看起来很疯狂,本机批处理没有直接的方法来列出特定文件夹名称的所有位置。除非 DIR 命令包含通配符,否则 DIR 将在指定文件夹中查找文件或文件夹,而不是列出文件夹名称本身。

解决方案是将结果通过管道传递给 FINDSTR

dir /s /b /ad A | findstr /irc:"[\\]D$"

如果将目标文件夹名称添加到 DIR 命令并附加通配符,则性能可能会有所优化:

dir /s /b /ad A\D? | findstr /irc:"[\\]D$"

【讨论】:

    【解决方案2】:

    在 A 中使用 find: Unix

    find . -name "D" -type d
    

    窗户

    dir A /AD /S
    

    【讨论】:

    • 我在 windows 机器上查找命令不起作用。我在 git shell 中使用这些命令。
    • 我想打印该文件夹的完整路径(如果存在)。
    【解决方案3】:

    不确定这是不是你的意思,但是...

    .... 设置 ....

    user@machine ~:$ mkdir tmp
    user@machine ~:$ cd tmp
    user@machine ~/tmp:$ mkdir -p A/B/C/D
    user@machine ~/tmp:$ mkdir -p A/Q/W/X/D
    user@machine ~/tmp:$ mkdir -p A/S/D/F
    

    ... 查找命令 ....

    user@machine ~/tmp:$ find ./ -type d -name 'D'
    ./A/B/C/D
    ./A/S/D
    ./A/Q/W/X/D
    user@machine ~/tmp:$
    

    【讨论】:

    • 您给出的命令会打印所有层次结构。如果存在这样的文件夹,我希望它只打印该文件夹的层次结构。
    • 为什么是-1? find A -type d -name 'D'是你想要的吗?
    • @BarathVutukuri:这是不正确的。这里建议的命令,只打印通向目录D的路径。当然有好几个路径,因为有好几个同名的目录。
    • @user1934428 我希望该命令仅打印通向文件夹 D 的路径
    • 有点老套但是... find ./ -type d -name 'D'|sed 's/D$//'
    最近更新 更多