Чтобы заставить Gridengine запланировать вашу 20-ядерную работу на одном узле, вам придется создать новую параллельную среду или настроить ту, которую вы используете. Вам нужна установка
allocation_rule $pe_slots
Изman sge_pe
:
If the special denominator $pe_slots is used, the full range of processes as specified with the qsub(1) -pe switch has to be allocated on a single host.
Не забудьте прикрепить новый PE к вашей очереди.
Чтобы устранить проблему с источником, выполняя задание MPI более чем на одном узле, вы можете открыть второй вопрос с более подробной информацией об этом.
С zsh
вы можете использовать другой подход, основанный на его функции приблизительного соответствия:
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
categories=(television lightbulb motorcar etc)
mkdir -p -- $dest/${(C)^categories}
zmv -n '(**/)(*[^0-9])<->(.*)' \
'$dest/${c::=${${(CM)categories:#(#a3)$2}:-unknown}}/$c-$(
zstat -F %FT%T%z +mtime -- $f)$3'
${(M)categories:#(#a3)$2}
ищет$2
(часть перед числом )в массиве categories
, допуская до трех ошибок(различных символов, транспонирования, вставки, удаления ).
Снимите-n
(сухой -прогон ), если он в порядке.
Для вашего подхода это может быть что-то вроде:
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
typeset -A categories
categories=(
levis Television
ghtbu Lightbulb
otorc Motocar
)
mkdir -p -- $dest/$^categories
for k (${(k)categories}) (
zmv -n "(**/)*$k*(.*)" '$dest/$categories[$k]/$categories[$k]-$(
zstat -F %FT%T%z +mtime -- $f)$2'
)
Или, если общие символы всегда с 3 й по 7 й:
autoload zmv # best in ~/.zshrc
zmodload zsh/stat
dest=~/Categories
categories=(Television Lightbulb Motocar)
mkdir -p -- $dest/$^categories
for c ($categories) (
zmv -n "(**/)*$c[3,7]*(.*)" '$dest/$c/$c-$(
zstat -F %FT%T%z +mtime -- $f)$2'
)
Вероятно, не самый эффективный способ, но я бы перевернул проблему с ног на голову и сопоставил строки в именах файлов с каталогами и, поскольку текущее перечисление является случайным, просто подсчитал их, чтобы сохранить уникальность.
homedir=~/Categories
eval homedir=$homedir
cats="Television Lightbulb Bananas Motorcar"
declare -A count
for cat in $cats; do if [ ! -d $homedir/$cat ]; then mkdir -p $homedir/$cat; fi; done
while read f; do
r=${f##*/}
r=${r%.*}
r=$(grep -Po "[a-z]+" <<<$r)
for cat in $cats; do
if [ $(grep -i "$r" <<< $cat) ]; then
((count[$cat]++))
mv "$f" $homedir/$cat/$cat-$(printf "%03g" ${count[$cat]}).${f##*.}
fi
done
done <<< $(find./banana/ -type f)
Совпадения, отличные от -, автоматически выходят из цикла grep
и остаются на месте для особого внимания позже.
Все, что вы хотите включить в композицию имени файла, может быть включено, дата последнего изменения будет
$(stat -c %Y $f)
и т. д.