2012-05-01 18 views
5

に複数の拡張子を持つファイルを検索しようとしていることは、私がこれまで私はシェルスクリプトここ

DIR="/home/username/Pictures/Wallpapers" 

while [ 1 -eq 1 ] 
do 
    PIC=$(ls $DIR/*.jpg | shuf -n1) 
    PIC1="file://"$PIC 

    gsettings set org.gnome.desktop.background picture-uri $PIC1 
    sleep 30; 
done 

スクリプトは動作しますが、私は、他のファイル拡張子を見つけるためにそれを拡張する方法を見つけ出すことはできません持っているものですjpgに加えて、pngやgifのように。

答えて

12

findを使用するのはどうですか?

find $DIR -name \*.jpg -o -name \*.png -o -name \*.gif -print 
+0

あなたは私にそれを打つ。 -maxdepthのようなものが使われていない限り、これはサブディレクトリ内のものも見つけます。 –

+0

このようなコードを使用しようとしました: PIC = $($ DIR -name \ * .jpg -o -name \ * .png -o -name \ * .gif -print | shuf -n1)を見つけよう そして私は$ PICをエコーし​​ますが、空行だけが表示されます。 – bbbgscott

+0

「*」の前にバックスラッシュを書いていますか? – Oliver

3

と仮定すると、bashの、最も簡単な変更は、ここで私はそれを見つける使用することをお勧めします

$ export DIR=Desktop 
$ PIC=$(ls $DIR/*.{jpg,png,gif} | shuf -n1) 
$ echo $PIC 

Desktop/polar.png 

私のマシン上のサンプルではなく、だ

PIC=$(ls $DIR/*.{jpg,png,gif} | shuf -n1) 

だろう。

+0

私は にアクセスできません/home/username/Pictures/Wallpapers/*.{jpg,png}:そのようなファイルやディレクトリはありません 何か間違っていますか? – bbbgscott

+0

'' bashを仮定する ' – sehe

+0

これはbashです。ファイルの先頭にシバンを入れました。 – bbbgscott