16

拡張子がjpg、jpeg、pngのファイルを取得するためにbashでforループを作成しようとしていますが、これは私の試みですが、機能しません

for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;

基本的に、現在のフォルダー内のそれらの拡張子を持つファイルの名前を取得し、各ファイルで何かを実行してから、新しい拡張子でファイル名を出力します。

4

2 に答える 2

32

$fileどこにも使用していません。試す

for file in "$arg"/*.{jpg,jpeg,png} ; do
    echo "$file" > z.txt
done
于 2012-09-04T08:17:46.457 に答える
24

提案されたソリューションに対する2つの改善を提案したいと思います。

A. "$ arg" /。{jpg、jpeg、png}のforファイルは、jpeg拡張子を持つファイルがなく、スクリプトでエラーが発生する場合、 "$ arg"/.jpegも生成します。

$ echo *.{jpg,jpeg,png}
myPhoto.jpg *.jpeg *.png

これを回避するには、forループの直前で、nullglobを設定してリストからnullグロブを削除します。

$ shopt -s nullglob # Sets nullglob
$ echo *.{jpg,jpeg,png}
myPhoto.jpg
$ shopt -u nullglob # Unsets nullglob

B. * .png、*。PNG、または* .PnGも検索する場合(つまり、大文字と小文字を区別しない場合)、nocaseglobを設定する必要があります。

$ shopt -s nullglob # Sets nullglob
$ shopt -s nocaseglob # Sets nocaseglob
$ echo *.{jpg,jpeg,png}
myPhoto.jpg myPhoto.PnG
$ shopt -u nocaseglob # Unsets nocaseglob
$ shopt -u nullglob # Unsets nullglob
于 2016-12-14T09:49:15.210 に答える