Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在不使用find in Bash脚本的情况下,递归地获取文件夹(包括工作文件夹)中由多个扩展名过滤的所有文件_Linux_Bash_Shell - Fatal编程技术网

Linux 如何在不使用find in Bash脚本的情况下,递归地获取文件夹(包括工作文件夹)中由多个扩展名过滤的所有文件

Linux 如何在不使用find in Bash脚本的情况下,递归地获取文件夹(包括工作文件夹)中由多个扩展名过滤的所有文件,linux,bash,shell,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 parame

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

#!/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
基本上,我希望递归地从一个目录中获取所有文件,该目录作为一个参数(包括目录本身)通过文件夹中的扩展名列表进行过滤

我想知道是否有这样做的方法,以及如何不使用find命令

假设我有一个文件树:

  • bin/props.properties
  • bin/xmls.xml
  • bin/source/sources.sh
  • bin/config/props.properties
  • bin/config/folders/moreProps.xml
我的脚本现在是从/bin运行的,它将响应:

  • bin/source/sources.sh
  • bin/config/props.properties
  • bin/config/folders/moreProps.xml
将工作路径中的那些放在一边

另外,我知道这可以用find来完成,但我真的想知道是否还有其他方法可以学习


谢谢

您可以使用findgrep,如下所示:

#!/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})"

好的第一个问题,但是。所以在你的例子中,
$SOURCE\u FOLDER/{,***/}*($FILE\u EXTENSIONS)
应该把它分成两个全局
$SOURCE\u FOLDER/****($FILE\u EXTENSIONS)$SOURCE\u FOLDER/**($FILE\u EXTENSIONS)
。尽管我认为第一个大括号扩展语法是cleanerGreat!非常感谢你!这让我很困惑,你可以从我的问题和副本的制作方式看出。再次感谢!