recursion查找具有特定扩展名的文件

我试图find具有特定扩展名的所有文件在我的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" 

不幸的是,当我在terminal上启动这个脚本时,它说:

 [: 29: in: unexpected operator 

(用$extension而不是'in'

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

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

比整个事情要短一些(而且更安全 – 处理文件名和目录名称中的空格)。

您的脚本可能会失败,没有一个条目. 在他们的名字,使$extension空。

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

例如 查找当前目录中的所有csv文件

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

我使用的语法与@Mattbuild议的有些不同:

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

(这是一个less击键)。

  1. browsefolders ()后面有一个{ missing
  2. 所有$in都应该是$suffix
  3. cut线只会让你在front.middle.extension的中间部分。 您应该阅读${varname%%pattern}和朋友的shell手册。

我假设你在shell脚本中做这个练习,否则已经提出的find解决scheme是要走的路。

要检查正确的shell语法,而不运行脚本,请使用sh -n scriptname

不使用find

 du -a $directory | awk '{print $2}' | grep '\.in$' 

要查找当前目录中的所有pom.xml文件并将其打印出来,可以使用:

 find . -name 'pom.xml' -print 
 find $directory -type f -name "*.in"|grep $substring