1

我写了一个脚本,直接报告当前目录中的文件。我想扩展我的脚本,使其贯穿所有子目录和子目录的子目录等,并进行整体报告。

例如:

在此处输入图像描述

my_script > report

创建一个报告,如:

HEADERS += \ 
    header1.h \
    header2.h \

SOURCES += \ 
    source1.cpp \
    source2.cpp \

但是让我们假设我们有子文件夹:

在此处输入图像描述

我想做一个递归报告,如:

INCLUDEPATH += "relative path to subfolder1"

"result of my_script for subfolder1"

INCLUDEPATH += "relative path to subfolder2"

"result of my_script for subfolder2"

HEADERS += \ 
    header1.h \
    header2.h \

SOURCES += \ 
    source1.cpp \
    source2.cpp \

我试图查看类似的问题,但所有这些问题在本质上似乎都不同,并且由一行 linux 命令回答。我认为我的问题更复杂,因为脚本需要递归调用自身。

编辑:这是我的脚本:

#!/bin/bash

if ls *.h &> /dev/null; then
echo "HEADERS += \ "
printf '    %s \\\n' *.h
echo ""
fi

if ls *.cpp &> /dev/null; then
echo "SOURCES += \ "
printf '    %s \\\n' *.cpp
echo ""
fi

if ls *.ui &> /dev/null; then
echo "FORMS += \ "
printf '    %s \\\n' *.ui
fi
4

4 回答 4

3

我认为我的问题更复杂,因为脚本需要递归调用自身。

它需要递归,还是需要为每个目录调用一次?这个片段应该允许后者:

find ${top:?} -type d | while read dir; do
    (cd $dir && ${name_of_script:?})
done

top注意:为变量(树的顶部)和添加合适的值name_of_script。它们已被编码${var:?}以捕获未设置的变量并允许代码段优雅地失败。

于 2013-09-12T10:51:12.437 回答
1

/您可以通过在 glob 中添加尾随来遍历子目录。

# When there are no matches for a glob, don't treat the glob literally
shopt -s nullglob

# Recursion is avoided when you have no subdirectories
for subdir in */; do
    printf 'INCLUDEPATH += "%s"\n' "$subdir"
    my_script
done

# Arrays aren't strictly necessary, but make things simpler
headers=( *.h )
if [[ $headers ]]; then
    printf 'HEADERS += \\\n'
    for header in "${headers[@]}"; do
        printf '    %s \\\n' "$headers"
    done
fi

sources=( *.cpp )
if [[ $sources ]]; then
    printf 'SOURCES += \\\n'
    for source in "${sources[@]}"; do
        printf '    %s \\\n' "$source"
    done
fi
于 2013-09-12T12:16:30.820 回答
0

利用ls -R *.cpp

-R 代表递归

于 2013-09-12T10:42:43.067 回答
0

利用ls -lR mainfolder | grep fileextensiontobereported

例如:ls -lR directory1 | grep .cpp

于 2013-09-12T10:51:22.220 回答