私は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
空になります。