Как да изведете списък с файлове на командния ред на bash

Използвам handlebars.js за изобразяване на шаблони от страна на клиента (използвайки Jade от страна на сървъра на node.js) за нашето приложение с една страница.

Искам предварително да компилирам шаблоните на кормилото от страната на сървъра и да ги обединя като един JS файл, който да изпратя на клиента.

В момента използвам handlebars, за да компилирам шаблони по следния начин:

$ handlebars template1.handlebars template2.handlebars -f precompiled_templates.js

Бих искал да напиша bash скрипт, който може да чете всички *.handlebars файлове в директория и след това да ги изпълнява през компилатора на кормилото. И така, ако имах такава директория:

templates/
  temp1.handlebars
  temp2.handlebars
  temp3.handlebars
  temp4.handlebars

Изпълнението на моя bash скрипт (или команда от един ред) в директорията с шаблони по същество ще изпълни следната команда handlebars:

$ handlebars temp1.handlebars temp2.handlebars temp3.handlebars temp4.handlebars -f precompiled_templates.js

Някой знае ли как мога да напиша bash скрипт, за да получа всички файлове на кормилото в директория в командния ред, както по-горе?


person Gaurav    schedule 25.09.2012    source източник


Отговори (3)


Изглежда, че искате нещо подобно на

handlebars templates/*.handlebars -f precompiled_templates.js

с изключение на това, че ще получите „шаблони“ с префикс към всеки файл. Предпочитаният от мен подход изисква два реда:

files=( templates/*.handlebars )
handlebars "${files[@]#templates/}" -f precompiled_templates.js.

Първият ред поставя всички желани файлове в масив. Във втория ред разширяваме съдържанието на масива, но премахваме префикса "templates/" от всеки елемент в полученото разширение.

person chepner    schedule 25.09.2012
comment
Опитах $ handlebars *.handlebars -f ... и не се получи, но това беше, защото посочвах грешната директория! Проблема решен! - person Gaurav; 26.09.2012

В директорията с шаблони направете:

handlebars `find -name *.handlebars` -f precompiled_templates.js

Обратните отметки означават, че ще изпълни тази команда и след това ще върне резултата, така че вие ​​на практика изпълнявате ръкохватки за всеки файл, който връща. Както е написано по-горе find ще търси в текущи и поддиректории за файловете, така че се уверете, че го стартирате от правилното място.

person Peter Oram    schedule 25.09.2012

В Bash списъците могат да се създават с низ в двойни кавички:

FILES="/etc/hosts /etc/passwd"
for file in $FILES; do cat $file ; done

<cat all files>

Можете също да използвате командите find и exec.

man [find|exec] за повече информация

person Zulu    schedule 25.09.2012