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击键)。
-   browsefolders ()后面有一个{missing
-  所有$in都应该是$suffix
-   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