特定の拡張子を持つファイルを再帰的に検索する 質問する

特定の拡張子を持つファイルを再帰的に検索する 質問する

私はBashを使って、ディレクトリとそのサブディレクトリにある特定の拡張子を持つすべてのファイルを検索しようとしています(ウブントゥ 10.04LTS (Lucid Lynx) リリース)。

スクリプト ファイルには次のように記述されています。

#!/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'

ここで何が起こっているのでしょうか、そしてどこにエラーがあるのでしょうか? しかし、この中括弧です。

ベストアンサー1

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

全体よりも少し短くなります (そしてより安全です。ファイル名とディレクトリ名の空白を処理します)。

.おそらく、スクリプトは、名前に が含まれないエントリに対しては失敗し、$extension空になります。

おすすめ記事