我试图在我的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')

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


当前回答

find {directory} -type f -name '*.extension'

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

find . -type f -name '*.csv'

其他回答

我使用的语法与@Matt建议的略有不同:

find $directory -type f -name \*.in

(少敲一次键)。

find {directory} -type f -name '*.extension'

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

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

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

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

browsefolders()后面缺少一个{ 所有的$in都应该是$后缀 有切口的线只能得到front.mid .extension的中间部分。你应该阅读你的shell手册关于${varname%%pattern}和朋友。

我假设您将此作为shell脚本的练习,否则就应该使用已经提出的find解决方案。

如果不运行脚本,使用sh -n scriptname检查shell语法是否正确。

for file in "${LOCATION_VAR}"/*.zip
do
  echo "$file"
done