我试图在我的bash(最新的Ubuntu LTS发行版)的目录及其子目录中找到具有特定扩展名的所有文件。

这是写在脚本文件中的内容:

#!/bin/bash

directory="/home/flip/Desktop"
suffix="in"

browsefolders ()
  for i in "$1"/*; 
  do
    echo "dir :$directory"
    echo "filename: $i"
    #   echo ${i#*.}
    extension=`echo "$i" | cut -d'.' -f2`
    echo "Erweiterung $extension"
    if     [ -f "$i" ]; then        

        if [ $extension == $suffix ]; then
            echo "$i ends with $in"

        else
            echo "$i does NOT end with $in"
        fi
    elif [ -d "$i" ]; then  
    browsefolders "$i"
    fi
  done
}
browsefolders  "$directory"

不幸的是,当我在终端中启动这个脚本时,它说:

[: 29: in: unexpected operator

(用$extension代替'in')

这里发生了什么,错误在哪里? 但是这个大括号


当前回答

要找到当前目录中的所有pom.xml文件并打印它们,您可以使用:

find . -name 'pom.xml' -print

其他回答

for file in "${LOCATION_VAR}"/*.zip
do
  echo "$file"
done 
find {directory} -type f -name '*.extension'

示例:要查找当前目录及其子目录下的所有csv文件,使用:

find . -type f -name '*.csv'
find "$PWD" -type f -name "*.in"
find "$directory" -type f -name "*.in"

比整个代码略短(而且更安全——处理文件名和目录名中的空白)。

您的脚本可能会失败的条目没有。以他们的名字,使$extension为空。

find $directory -type f -name "*.in"|grep $substring