如何递归查找具有特定扩展名的文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (7)
  • 关注 (0)
  • 查看 (44)

我试图在目录及其子目录中找到具有特定扩展名的所有文件(最新的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 "*.in"|grep $substring
用户回答回答于

你可以使用以下办法在当前的目录文件中找到所有的pom.xml文件并打印它们:

find . -name 'pom.xml' -print
用户回答回答于

不使用find:

du -a $directory | awk '{print $2}' | grep '\.in$'
用户回答回答于
  1. browsefolders ()后面少了一个
  2. $in都应该是$suffix
  3. cut行只会让你看到前面的中间部分,你应该在${varname%%pattern}和friends中读取shell手册。

我假设你是在shell脚本中做这个练习,否则已经提出的find解决方案是可行的。

可以通过使用sh -n scriptname来检查正确的shell语法,无需运行脚本,

用户回答回答于
用户回答回答于
find {directory} -type f -name '*.extension'

查找当前目录中的所有CSV文件

find . -type f -name '*.csv'
用户回答回答于
find $directory -type f -name "*.in"

比整个文件要短一点(而且更安全--处理文件名和目录名中的空白)。

如果在name中没有.的话,你的脚本可能不具备完整性,并且会使$extension为空。

扫码关注云+社区