1) On what does this behavior depend? Is it some setting in package manager or the package itself decides whether it is enabled or not?
Каждый дистрибутив может использовать разные менеджеры пакетов, такие как apt в Debian или pacman в Arch Linux. Это требует от разработчиков программного обеспечения и/или сопровождающих пакетов подготовки пакета различными (зачастую непоследовательными )способами. Такие различия могут быть связаны с настройками в пакете, но иногда пакет может быть подготовлен без предположения, что systemd будет использоваться в целевой системе.
2) How can I change it?
Узнайте, как подготавливается и поддерживается конкретный пакет для вашего дистрибутива и кто за него отвечает. Если это открытый исходный код, есть вероятность, что вы сможете самостоятельно изменить поведение в источниках установки. Вы также можете связаться с кем-то из сообщества разработчиков/сопровождающих программного обеспечения, чтобы предложить изменения.
Напишите свой сценарий так, чтобы он выполнял итерации по своим аргументам. Например:
#!/bin/bash
rhubarb='/hummdinger/LoCI/LoCI_orig/TSV/rhubarb-lip-sync-1.10.0-osx/rhubarb'
outdir='/hummdinger/LoCI/LoCI_orig/LOCI_GAME_FILES/Compiled/Windows/sync/'
for fn in "$@"; do
bn=$(basename "$fn".wav)
"$rhubarb" "$fn" -o "$outdir/$bn.tsv"
done
Сохраните это как, например, myscript1.sh
и сделайте его исполняемым с помощью chmod +x myscript1.sh
.
Вы можете запустить это напрямую, но каждый файл будет обрабатываться последовательно. Вместо этого вы хотите запустить его с помощью GNU parallel
или xargs -P
. Например. со сценарием-оболочкой, подобным следующему, который делит количество обрабатываемых файлов на количество ядер, которые у вас есть.
Обратите внимание, что в зависимости от того, что именно делает rhubarb
, эта задача, скорее всего, больше связана с вводом-выводом -, чем с процессором -, поэтому добавление слишком большого количества ядер не поможет -на самом деле, это, вероятно, замедлит работу, так как будет слишком много конкуренции за дисковый ввод-вывод... особенно если вы используете это на жестком диске, а не на твердотельном накопителе.
Возможно, вы захотите жестко -закодировать что-то вроде cores=4
или cores=8
в приведенном ниже сценарии, а не использовать lscpu | awk...
, как у меня (Я написал это так, потому что я использую threadripper 1950x с 16 ядрами и 32 потоками... и я не хотел запускать 32 задания параллельно. А также как пример того, как можно извлечь полезную информацию из lscpu
).
Также рекомендуется :если у вас более одного диска, постарайтесь организовать все так, чтобы каталог, из которого вы читаете файлы.wav, находился на одном диске, а каталог, в который вы записываете файлы.tsv, находился на другом. Это устранит конфликт ввода-вывода между чтением и записью файлов. Если файлы.tsv невелики, запишите их во временный каталог на виртуальном диске tmpfs и переместите в окончательное место в конце сценария.
#!/bin/bash
wavdir="$1"
cores=$(lscpu | awk -F': +' '/^CPU\(s\):/ {cpus=$2};
/^Thread\(s\) per core:/ {tpc=$2};
END { print int(cpus / tpc) }')
count=$(find "$wavdir" -type f -name "*.wav" -print0 |
perl -0ne '$c++;END{print $c}')
let files_per_thread=count/cores
find "$wavdir" -type f -name "*.wav" -print0 |
xargs -0 -r -L "$files_per_thread" -P "$cores" /path/to/myscript1.sh
сохраните это как, например, myscript2.sh
и сделайте его исполняемым с помощью chmod +x myscript2.sh
.
Это скрипт, который вы запускаете из командной строки, cron или чего-то еще. Он, в свою очередь, использует xargs
для параллельного запуска нескольких экземпляров myscript1.sh
.
Запустите как:
./myscript2.sh /hummdinger/LoCI/LoCI_orig/VO/WAV_Processed/
Кстати,это использует NUL в качестве разделителя между именами файлов, поэтому безопасно использовать с любым именем файла (с использованием новой строки, поскольку разделитель имен файлов небезопасен, поскольку новая строка является допустимым символом в имени файла ).
С помощью GNU Parallel вы можете сделать что-то подобное:
rhubarb=/hummdinger/LoCI/LoCI_orig/TSV/rhubarb-lip-sync-1.10.0-osx/rhubarb
find /hummdinger/LoCI/LoCI_orig/VO/WAV_Processed/ -name "*.wav" |
parallel $rhubarb {} -o {.}.tsv
Или (, если вам действительно нужен вывод в другом каталоге):
find /hummdinger/LoCI/LoCI_orig/VO/WAV_Processed/ -name "*.wav" |
parallel $rhubarb {} -o /hummdinger/LoCI/LoCI_orig/LOCI_GAME_FILES/Compiled/Windows/sync/{/.}.tsv