繁体   English   中英

如何在不使用Bash脚本的情况下递归地获取包含工作文件夹的文件夹中多个扩展名过滤的所有文件

[英]How to recursively get all files filtered by multiple extensions within a folder including working folder without using find in Bash script

经过一天的搜寻之后,我仍然有这个问题,也许是我做错了,这是我的指令码:

#!/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命令怎么做。

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

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

, would echo: 我的脚本现在就从运行,它将回显:

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

将它们留在工作路径中。

PS我知道这可以通过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})"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM