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

新手上路,请多包涵

我正在尝试使用我的 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'

这是怎么回事,错误在哪里?但是这个花括号

原文由 flip 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
1 个回答
find "$directory" -type f -name "*.in"

比整个东西短一点(并且更安全 - 处理文件名和目录名中的空格)。

对于名称中没有 . 的条目,您的脚本可能会失败,从而使 $extension 空。

原文由 Mat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题