我编写了一个直接在当前目录中报告文件的脚本。我想扩展我的脚本,以便它遍历子目录的所有子目录和子目录,依此类推,并进行整体报告。
例如:
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
答案 0 :(得分:3)
我认为我的问题更复杂,因为脚本需要递归调用自己。
是否需要递归,或者是否需要为每个调用一次 目录?这个片段应该允许后者:
find ${top:?} -type d | while read dir; do
(cd $dir && ${name_of_script:?})
done
N.B。:为变量top
(树的顶部)和name_of_script
添加合适的值。
它们已使用${var:?}
编码以捕获未设置的变量并允许代码段失败
正常。
答案 1 :(得分: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
答案 2 :(得分:0)
使用ls -R *.cpp
-R代表递归
答案 3 :(得分:0)
使用ls -lR mainfolder | grep fileextensiontobereported
例如:ls -lR directory1 | grep .cpp