Shell Script для запуска команд для всех подкаталогов

aking1012, поддержка TOS заставила меня удалить OpenJDK и установить Sun JRE 1.6. В результате в моей версии java показано:

java version "1.6.0_31" Java (TM) SE Runtime Environment (build 1.6.0_31-b04) 64-разрядная серверная виртуальная машина Java HotSpot TM (сборка 20.6 -b01, смешанный режим)

Но thinkdesktop по-прежнему падает настолько часто, что он непригоден.

Удалил Sun JRE и переустановил OpenJDK? Спасибо!

1
задан 2 August 2012 в 16:44

2 ответа

Вы можете перебирать subdirs с помощью цикла for, как это

#!/usr/bin/env bash

for dir in /the/path/*/; do
    awk 'tolower($0) ~ /01_node_setup/{line=$0} END{print line}' "$dir/his_file"

    if [[ -f "$dir/sysconfig.out" ]]; then
        awk '/Drive Model/{getline line} END{print line}' "$dir/sysconfig.out"
    else
        awk '/Pair0 DIMM0/{print;exit}' "$dir/node0/trans_file_prev"/*setupsys*
    fi
done >> /home/xtee/sst-logs.out

Я изменил ваш greps на awks, который должен быть более портативным. Я считаю, что они должны производить тот же результат. Важными частями являются цитаты вокруг путей.

2
ответ дан 25 May 2018 в 07:59
  • 1
    Большой! Спасибо, что поделились некоторыми навыками скрипта fu! ;) (Я очистил все комментарии здесь, надеюсь, что все в порядке) – Bruno Pereira 3 August 2012 в 18:38

Более простой, хотя и менее изящный способ итерации подкаталогов:

base="/something"

iterator() {
  local dir="$1"
  local i=
  for i in "$dir"/*; do
    if [[ -d "$i" ]]; then
      iterator "$dir/$i"
    else
      # do something with this file
    fi
  done
}

iterator "$base"
2
ответ дан 25 May 2018 в 07:59

Другие вопросы по тегам:

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