Это будет зависеть от конкретной разновидности задействованного ps
, но может запускать что-то вроде
zstyle ':completion:*:processes' command 'ps -A'
Если вам не нужно исключать какие-либо каталоги, вы также можете сделать это:
ls -d */ | sort -t_ -n -k2
Для сортировки записей по правильному порядку номеров (например, 1, 2, 3, [...], 9, 10, 11, 12) вместо символа сортировки (например, 1, 10, 11, 12, 2, 3, [...], 9) вы можете использовать команду ls
с опцией -v
и печатать по одной строка с опцией -1
.
Измените вашу команду на TMPLIST = "$ (ls -v1 $ MYWEBAPPSRV_DIR)"
, чтобы создать список со всеми файлами в правильном порядке.
Я не совсем понимаю, что вы имеете в виду, когда говорите, что вам нужен только каталог, а не файл. Если я неправильно понял, поясните, пожалуйста. Вот сценарий, который, учитывая путь, выполнит некоторый код, если это файл, или другой код, если это каталог. Сохраните проверяемый путь в переменной с именем $ test, чтобы это работало.
if [ "$(ls -ld $test | grep '^d')" != "" ]
then echo "Directory code here"
else echo "File code here"
fi
Zsh доступен в большинстве дистрибутивов, но часто не является частью стандартной установка. Если установка не представляет проблемы, используйте ее, так как функция glob qualifier решает вашу проблему очень легко:
#!/bin/zsh
cd $MYWEBAPPSRV_DIR
TMPLIST=(*(/n))
for app in $TMPLIST; do … done
glob *
перечисляет все файлы (кроме файлов точек), затем квалификатор glob /
выбирает только те, которые являются каталогами, а n
вызывает числовую сортировку для последовательностей цифр вместо лексикографического порядка по умолчанию.Если вы не хотите переходить в каталог, но хотите исключить часть каталога из совпадений, используйте модификатор раскрытия истории , чтобы сохранить только часть базового имени:
#!/bin/zsh
TMPLIST=($MYWEBAPPSRV_DIR/*(/n:t))
for app in $TMPLIST; do … done
При установке zsh непрактично, и вы используете систему с GNU coreutils (например, невстроенный Linux, Cygwin), а имена файлов не содержат специальных символов (пробелов или подстановочных знаков), тогда вы можете использовать ls -v
для сортировки имен файлов в числовом порядке последовательностей цифр и -F
для отображения типов файлов в сочетании с текстовым фильтром для выбора только каталогов.
TMPLIST=$(ls -Fv $MYWEBAPPSRV_DIR | sed -n 's!/$!!p')
for app in $TMPLIST; do … done
for (( n = 1; n < 12; ++n )); do
for appsrv_dir in "$MYWEBAPPSRV_DIR"/*_"$n"; do
if [[ -d "$appsrv_dir" ]]; then
( cd "$appsrv_dir" && somecommand )
fi
done
done
Выполняется итерация по числам от 1 до 12 и соответствует чему-либо в каталоге $ MYWEBAPPSRV_DIR
, в конце имени которого указан этот номер (с подчеркиванием перед Это). Если это каталог, делайте с ним все, что вам нужно. Этот синтаксис требует либо bash
, либо ksh
.
Очевидно, что «12» должно быть наивысшим числовым суффиксом любого каталога в $ MYWEBAPPSRV_DIR
.
Другой способ сделать это с явной сортировкой имен каталогов: Сначала составьте список каталогов:
for thing in "$MYWEBAPPSRV_DIR"/*_[0-9] "$MYWEBAPPSRV_DIR"/*_[0-9][0-9]
do
if [[ -d "$thing" ]]; then
printf '%s\n' "$thing"
fi
done
Это перебирает все в каталоге $ MYWEBAPPSRV_DIR
, имя файла которого заканчивается на _
, за которым следует одна или две цифры, и отправляет эти имена файлов на стандартный вывод, если они на самом деле являются именами каталогов.
Затем отсортируйте эти имена по номеру после _
:
for thing in "$MYWEBAPPSRV_DIR"/*_[0-9] "$MYWEBAPPSRV_DIR"/*_[0-9][0-9]
do
if [[ -d "$thing" ]]; then
printf '%s\n' "$thing"
fi
done | sort -t '_' -k2,2n
Предполагая, что в имени есть только одно подчеркивание, это будет отсортировать имена в возрастающем числовом порядке на основе числа в суффиксе. Утилита sort
читает из стандартного ввода и записывает отсортированный список каталогов в стандартный вывод.
Затем сделайте все, что вам нужно, с этими каталогами:
for thing in "$MYWEBAPPSRV_DIR"/*_[0-9] "$MYWEBAPPSRV_DIR"/*_[0-9][0-9]
do
if [[ -d "$thing" ]]; then
printf '%s\n' "$thing"
fi
done | sort -t '_' -k2,2n |
while read appsrv_subdir; do
( cd "$MYWEBAPPSRV_DIR/$appsrv_subdir" && somecommand )
done
измените его вот так... и попробуйте
TMPLIST=`cd $MYWEBAPPSRV_DIR; ls -l | awk '/myApp/{print $NF}' | sort -t_ -n -k2`
TMPLIST=`cd $MYWEBAPPSRV_DIR; ls -1 | awk '/myApp/' | sort -t_ -n -k2`