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/source/sources.sh
- bin/config/props.properties
- bin/config/folders/moreProps.xml
谢谢 您可以使用find和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})"
好的第一个问题,但是。所以在你的例子中,
$SOURCE\u FOLDER/{,***/}*($FILE\u EXTENSIONS)
应该把它分成两个全局$SOURCE\u FOLDER/****($FILE\u EXTENSIONS)$SOURCE\u FOLDER/**($FILE\u EXTENSIONS)
。尽管我认为第一个大括号扩展语法是cleanerGreat!非常感谢你!这让我很困惑,你可以从我的问题和副本的制作方式看出。再次感谢!