如何递归获取包含工作文件夹的文件夹中的多个扩展名筛选的所有文件,而不使用Bash脚本中的find

时间:2014-07-11 23:28:24

标签: linux bash shell

在网上搜索了一天之后,我有了这个问题,也许我做错了什么,这是我的剧本:

#!/bin/bash

shopt -s extglob

FILE_EXTENSIONS=properties\|xml\|sh\|sql\|ksh
SOURCE_FOLDER=$1

if [ -z "$SOURCE_FOLDER" ]; then
   SOURCE_FOLDER=$(pwd)
fi # Set directory to current working folder if no input parameter.

for file in $SOURCE_FOLDER/**/*.*($FILE_EXTENSIONS)
do
    echo Working with file: $file
done

基本上,我想递归地获取所有文件夹中的扩展名列表文件,这些文件来自作为参数传递的目录,包括目录本身。

我想知道是否有办法做到这一点以及如何不使用查找命令。

想象一下,我有这个文件树:

  • bin / props.properties
  • bin / xmls.xml
  • 仓/源极/ sources.sh
  • 仓/配置/ props.properties
  • 仓/配置/文件夹/ moreProps.xml

我的脚本,就像现在一样,从 / bin 运行,会回应:

  
      
  • 仓/源极/ sources.sh
  •   
  • 仓/配置/ props.properties
  •   
  • 仓/配置/文件夹/ moreProps.xml
  •   

将工作路径放在一边。

P.S。我知道这可以通过查找来完成,但我真的想知道是否还有另一种方式来学习。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将发现 grep 一起使用,就像这样:

#!/bin/bash
SOURCE_FOLDER=$1
EXTENSIONS="properties|xml|sh|sql|ksh"

find $SOURCE_FOLDER | grep -E ".(${EXTENSIONS})"

#or even better
find $SOURCE_FOLDER -regextype posix-egrep -regex ".*(${EXTENSIONS})"