Как записать сценарий для выполнения файлов в нескольких каталогах

Хорошо, таким образом, ответ - то, что программа красного смещения, на которую указывает Stéphane Gimenez в комментарии выше, может сделать это симпатичное просто. Это предназначено, чтобы сделать умную adjust-white-point-over-the-day вещь, но это может также быть сделано сделать одноразовые корректировки с -o флаг.

Температура требуемого цвета в Kelvin должна быть дана дважды из-за основанных на времени функций, который является немного странным, но неважным. И другой материал должен просто там подавить unhelpful-in-this-case информационные сообщения — это не важно.

 redshift -o -l 0:0 -m randr -t 6000:6000

Также важно отметить, что код предполагает, что нейтральный 6500. (И экспериментально, -t 6500:6500 кажется мне идентичен использованию -x удалить эффекты полностью.) В моей системе, где я думаю, собственная белая точка является 9300K или так, я не уверен, что фактические числа заканчивают тем, что означали, но эффект выбора, что-то понижается, чем 6 500, конечно, точно, что я хочу.

Мне было любопытно, таким образом, я посмотрел на код. Красное смещение делает что-то немного более сложное, чем выполнение xgamma — это имеет целую таблицу шкалы цветов с данными, полученными из http://www.vendian.org/mncharity/dir3/blackbody/. Я изучил бы его еще больше, но я думаю, что следующий шаг идет для настоящей надлежащей калибровки цветов.

4
05.11.2010, 08:32
2 ответа

find будет работать волшебство на Вас.

find -name datafile.dat -execdir ~/a.py '{}' \;

Находка ищет рекурсивно во всех подкаталогах для файлов, которые соответствуют ряду правил, и выполняет действие с ними.

- правило имени позволит Вам найти файлы с именем, которое соответствует тому, что Вы даете ему. Можно использовать globbing, например, "*.dat" нашел бы все .dat файлы.

При необходимости можно использовать-regex вместо - имя для соответствия regex шаблону вместо шаблона шарика, таким образом, Вы могли сделать ".*\.dat$" для соответствия всем .dat файлам.

-execdir выполнит любую команду, которую Вы даете ему из каталога найденного файла, заменяя "{}" с найденным файлом.

8
27.01.2020, 20:46
  • 1
    Хороший. Я должен действительно учиться find, это имеет флаги для каждой мыслимой ситуации –  Michael Mrozek♦ 06.11.2010, 06:32
  • 2
    Страница справочника для находки не является большой, но информационные страницы обширны. –  Shawn J. Goff 06.11.2010, 07:47
  • 3
    @Michael: Zsh имеет подобные функции; они являются более загадочными, но меньше ввода. @Shawn: -execdir является полезным, но не портативным. @all: В ударе 4 или zsh, можно сделать for x in **/datafile.dat; do (cd "$(dirname "$x")" && ~/a.py "$(basename "$x")"); done –  Gilles 'SO- stop being evil' 06.11.2010, 15:16

Можно, вероятно, просто использовать a for цикл:

for i in first_dir second_dir third_dir; do
    pushd $i
    a.py
    popd
done

Это будет работать pushd $i; a.py; popd с $i набор к first_dir, с другой стороны с $i как second_dir, и наконец $i как third_dir. pushd переключатели к данному каталогу, и popd переключатели назад туда, где Вы были

7
27.01.2020, 20:46
  • 1
    Вместо pushd и popd можно использовать подоболочку - (cd $i && a.py). Эта конструкция также защищает от $i, не существующего - Вы не хотите к popd, если pushd не работал. –  camh 05.11.2010, 08:57
  • 2
    @Michael, @camh, @sinyeo: Всегда помещайте двойные кавычки вокруг подстановок переменных., например. cd -- "$i". Кроме того, защитите команды от начала файлов - путем передачи -- перед именами файлов. –  Gilles 'SO- stop being evil' 05.11.2010, 10:30
  • 3
    Хорошо, поскольку всегда комментарии являются правильными, но я не могу помнить прошлый раз, когда я отправил крошечный отрывок оболочки без кого-то комментирующего что-то вроде этого - делают Вас, парни серьезно пишут одноразовые циклы со всеми этими встроенными дублированиями? Вы защищаете от каталогов, не существующих, или имеете пробелы или запускающийся с тире, как будто это должно принять произвольный вход; это - одноразовое для цикла, которого это выполняет итерации по статическому массиву "first_dir second_dir third_dir" - ни одна из тех вещей не проблема –  Michael Mrozek♦ 05.11.2010, 16:14
  • 4
    @Michael: Я стремлюсь включать надлежащее заключение в кавычки и соответствующие обобщения в моих общедоступных публикациях. Я не могу знать, когда кто-то, случайный читатель собирается скопировать некоторый бит ответа в контекст, который является (без ведома читателю) просто достаточно отличающийся от исходного контекста. Используя заключение в кавычки и другое обобщение методы могут значительно развернуть ширину ситуаций, где любой данный фрагмент кода может быть правильно применен. Мне также нравится использовать надлежащее заключение в кавычки, и т.д. в моем интерактивном использовании, так как я нахожу, что такая практика формирует привычки, которые приносят пользу мне при записи полных программных оболочек. –  Chris Johnsen 06.11.2010, 04:00
  • 5
    @Michael: Я полностью соглашаюсь с Chris; я имею привычку заключать в кавычки даже в остротах и использовать && если это возможно, потому что Вы просто никогда не знаете, когда Вы забудете, существует пространство в чем-то, или сделайте опечатку, заставляющую ключевую команду перестать работать, и в зависимости от того, когда оно кусает Вас, у Вас могла быть путаница для распутывания. –  Cascabel 06.11.2010, 04:11

Теги

Похожие вопросы