如何使用树命令仅展开选定的文件夹?

如何使用树命令仅展开选定的文件夹?

我正在创建一个脚本,该脚本将项目文件夹以及其他一些模块文件夹生成到另一个文件夹中。我想展示生成的项目文件夹结构在最终树中的外观,但避免扩展所有其他文件夹,以便可视化更清晰。

例如,如果我tree单独这样做,会发生以下情况:

.
├── CMakeLists.txt
├── cfg
│   ├── hsm_engine_cfg.h
│   ├── osal_rtos_defs.h
│   ├── system_events.h
│   ├── system_tasks.h
│   ├── system_trace_cfg.h
│   └── test_delete_cfg.h
├── hsm-engine
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── component.mk
│   ├── docs
│   │   ├── HSM-Engine.mdj
│   │   ├── images
│   │   │   ├── choiceState.png
│   │   │   ├── inconditionalTransition.png
│   │   │   ├── inconditionalTransitionTwoEvents.png
│   │   │   ├── inconditionalTransitionTwoEventsOneGuard.png
│   │   │   ├── inconditionalTransitionWithActions.png
│   │   │   ├── simpleStateEmpty.png
│   │   │   ├── simpleStateEntry.png
│   │   │   ├── simpleStateEntryDo.png
│   │   │   └── simpleStateEntryExit.png
│   │   └── readme.md
│   ├── hsm_engine.c
│   ├── hsm_engine_cfg.h.txt
│   ├── include
│   │   ├── hsm_engine.h
│   │   ├── hsme_history_entry_struct_macro.h
│   │   ├── hsme_hsm_handler_macro.h
│   │   ├── hsme_state_transitions_macro.h
│   │   ├── hsme_states_array_macro.h
│   │   └── hsme_states_enum_macro.h
│   └── tools
│       ├── hsm-parser
│       └── hsm-parser.exe
├── osal
│   ├── CMakeLists.txt
│   ├── FreeRTOSConfig.h.txt
│   ├── Kconfig
│   ├── README.md
│   ├── component.mk
│   ├── include
│   │   ├── osal.h
│   │   ├── osal_events.h
│   │   ├── osal_task_sync.h
│   │   └── osal_tasks.h
│   ├── osal_events.c
│   ├── osal_rtos_defs.h.txt
│   ├── osal_task_sync.c
│   ├── osal_tasks.c
│   ├── system_events.h.txt
│   └── system_tasks.h.txt
├── test-delete
│   ├── CMakeLists.txt
│   ├── include
│   │   ├── test_delete_api.h
│   │   └── test_delete_event_id.h
│   ├── test_delete.c
│   ├── test_delete.h
│   └── test_delete_cfg.h.txt
├── test-gtest
│   ├── CMakeLists.txt
│   ├── README.md
│   └── test_delete_testsuite.cpp
├── test_delete_main.c
└── trace
    ├── CMakeLists.txt
    ├── Kconfig
    ├── README.md
    ├── component.mk
    ├── include
    │   ├── colors.h
    │   └── system_trace.h
    ├── system_trace.c
    └── system_trace_cfg.h.txt

正如您所看到的,这是很多输出,并且不清楚我感兴趣的创建的文件夹是test-delete.

我尝试过的tree -P 'test-delete*|test_delete*'确实很接近我需要的。它给出:

.
├── cfg
│   └── test_delete_cfg.h
├── hsm-engine
│   ├── docs
│   │   └── images
│   ├── include
│   └── tools
├── osal
│   └── include
├── test-delete
│   ├── include
│   │   ├── test_delete_api.h
│   │   └── test_delete_event_id.h
│   ├── test_delete.c
│   ├── test_delete.h
│   └── test_delete_cfg.h.txt
├── test-gtest
│   └── test_delete_testsuite.cpp
├── test_delete_main.c
└── trace
    └── include

但它仍在扩展所有文件夹,这并不理想。我正在寻找正确的tree配置,所以我有这个:

.
├── cfg
│   └── test_delete_cfg.h
├── hsm-engine
├── osal
├── test-delete
│   ├── include
│   │   ├── test_delete_api.h
│   │   └── test_delete_event_id.h
│   ├── test_delete.c
│   ├── test_delete.h
│   └── test_delete_cfg.h.txt
├── test-gtest
├── test_delete_main.c
└── trace

正如你在这里看到的。仅cfgtest-delete文件夹展开,其余部分不展开。有办法实现这一点吗?

答案1

假设您的文件名不包含换行符,您始终可以这样做:

find . -path '*test[-_]delete*' | tree --fromfile /dev/stdin

或者

find . | grep 'test[-_]delete' | tree --fromfile /dev/stdin

答案2

如果您的目标是查找名称中带有“test-delete”的文件,那么最好使用find

find . -name test-delete*

相关内容