簡體   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