如何在find命令的通配符表达式后指定搜索深度?
优化方案
你可以通过两层find嵌套的方式实现需求,完全匹配你的使用条件,且不会额外扫描多余文件:
find "$FIND_START" -type d -name "DAT" -exec find {} -maxdepth 1 -type f -name "*.zip" \; | while read -r SOURCE_FILE do echo "Generating data from $SOURCE_FILE" java -jar \ generator-0.2.4-jar-with-dependencies.jar \ $SOURCE_FILE $VARIATION $OUTPUT_DIR $NUM_GENERATE $SEED \ > stdout.txt 2> stderr.txt done
原理解释
- 第一层
find从你指定的起始目录开始,不限深度查找所有名称为DAT的文件夹,解决了DAT层级不固定的问题 - 对每个找到的DAT文件夹,执行第二层
find,通过-maxdepth 1限制只搜索DAT目录的直接子文件,不扫描DAT的子目录,刚好匹配你所有zip都直接存放在DAT下的条件 - 相比你原写法用
-wholename做全路径匹配的逻辑,该方案不会扫描DAT以外的目录下的文件,大幅减少不必要的IO操作,降低耗时
兼容性说明
Windows下的Git Bash自带的是GNU版本的find,完全支持上述-maxdepth、-exec参数,可直接运行无需额外调整。
内容的提问来源于stack exchange,提问作者rocksNwaves
相关产品推荐
相关产品推荐

