2012-05-01 4 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 

Скрипт работает, но я не могу понять, как расширить его, чтобы найти другие расширения файлов , например png или gif в дополнение к jpg.

ответ

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) А потом I echo $ PIC, но отображаются только пустые строки. – bbbgscott

+0

Вы писали обратную косую черту перед «*»? – Oliver

3

Предполагая Баш, простейший изменение будет

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

Вот пример на моей машине

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

Desktop/polar.png 

Я рекомендую использовать найти для этого, вместо этого.

+0

, когда я пробую этот код, я получаю ls: не могу получить доступ /home/username/Pictures/Wallpapers/*.{jpg,png}: Нет такого файла или каталога Я делаю что-то неправильно? – bbbgscott

+0

'Предполагая bash' – sehe

+0

Это bash. Я включил shebang в начало файла. – bbbgscott

Смежные вопросы