“Без рекурсии”, сделайте Вы имеете в виду это если directoryName1
имеют подкаталоги, затем Вы не хотите считать файлы в подкаталогах? Если так, вот способ считать все регулярные файлы в обозначенных каталогах:
count=0
for d in directoryName1 directoryName2; do
for f in "$d"/* "$d"/.[!.]* "$d"/..?*; do
if [ -f "$f" ]; then count=$((count+1)); fi
done
done
Обратите внимание что -f
тест выполняет две функции: это тестирует, является ли запись, подобранная одним из шариков выше, регулярным файлом, и это тестирует, была ли запись соответствием (если один из шариков ничему не соответствует, шаблон остается, как ¹). Если Вы хотите считать все записи в данных каталогах независимо от их типа, замены -f
с -e
.
Ksh имеет способ сделать файлы точки соответствия шаблонов и произвести пустой список в случае, если никакой файл не соответствует шаблону. Таким образом в ksh можно считать регулярные файлы как это:
FIGNORE='.?(.)'
count=0
for x in ~(N)directoryName1/* ~(N)directoryName2/*; do
if [ -f "$x" ]; then ((++count)); fi
done
или все файлы просто как это:
FIGNORE='.?(.)'
files=(~(N)directoryName1/* ~(N)directoryName2/*)
count=${#files}
Bash имеет различные способы сделать это более простым. Считать регулярные файлы:
shopt -s dotglob nullglob
count=0
for x in directoryName1/* directoryName2/*; do
if [ -f "$x" ]; then ((++count)); fi
done
Считать все файлы:
shopt -s dotglob nullglob
files=(directoryName1/* directoryName2/*)
count=${#files}
Как обычно, это еще более просто в zsh. Считать регулярные файлы:
files=({directoryName1,directoryName2}/*(DN.))
count=$#files
Изменение (DN.)
кому: (DN)
считать все файлы.
¹ Примечание, которому каждый шаблон соответствует сам, иначе результаты могли бы быть выключены (например, если Вы считаете файлы, которые запускаются с цифры, Вы не можете просто сделать for x in [0-9]*; do if [ -f "$x" ]; then …
потому что мог бы быть названный файл [0-9]foo
).
sysstat пакет включает mpstat. Выполнение
mpstat 2 | awk '{print $11}'
Дал мне процент времени простоя, который походит на инверсию того, что Вы хотите, таким образом, Вы, возможно, должны были бы сделать немного работы над выводом mpstat:
8 % mpstat 2 | awk '{print $11}'
%idle
100.00
99.50
100.00
100.00
100.00
100.00
У меня был mpstat в моей системе Slackware 11, но это не появилось в моей системе Arch, пока я не сделал pacman -S sysstat
В Вашем сценарии, устанавливает переменная среды СТОЛБЦОВ для верхнего уровня для получения вывода, в котором Вы нуждаетесь.
export COLUMNS=100
top -p ...
Вы могли также изменить var СТОЛБЦОВ только для top
вызов таким образом:
COLUMNS=100 top -p ...
Вы могли просто использовать f
ключ для корректировки отображенных столбцов. Удалите некоторые столбцы и добавьте % ЦП. Необходимо смочь видеть его затем.
top
не имеет параметра командной строки для определения столбцов.
– cjm
11.06.2011, 06:58
top
из сценария, таким образом, это не будет работать.
– Cory Klein
13.06.2011, 18:11
ps u -p <PID>
Хорошо работает. Вы также могли бы попытаться использовать awk
с ним:
pid=16707; ps u -p $pid --no-heading | awk -v pid=${pid} -F" " '{print "CPU usage for "$11": "$3}'
ps
просто дает общее среднее историческое использование.
– Cory Klein
13.06.2011, 18:12
-r-sr-s--- 1 root db2iadm1 147K Feb 1 23:32 /var/lib/db2/db2inst1/sqllib/adm/db2syscr*
---------121 большое спасибо--------44882----за Ваш ответ. Я уже установил его через виртуальную машину, как объяснено в вышеупомянутом ответе. BTW поле семени mandriva, кажется, более легкая опция. Конечно, попробует его в следующий раз Попытка этот: top -n 1 -p 13145 | grep PID --after 1 | grep -v PID | awk -F" " '{print $1}'
– laebshade
06.07.2011, 02:36