Сначала создайте сценарий-обертку, который переходит в каталог, указанный в первом (и единственном) аргументе командной строки, выполняет все необходимые настройки/инициализацию переменных/etc, а затем последовательно запускает ваши 10 сценариев с любыми необходимыми им аргументами.
Например, если каждый сценарий обрабатывает все файлы .jpg, .png и .gif в каталоге:
#! /bin/bash
# example-wrapper.sh
cd "$1"
script1 *.{jpg,png,gif}
script2 *.{jpg,png,gif}
script3 *.{jpg,png,gif}
script4 *.{jpg,png,gif}
script5 *.{jpg,png,gif}
script6 *.{jpg,png,gif}
script7 *.{jpg,png,gif}
script8 *.{jpg,png,gif}
script9 *.{jpg,png,gif}
script10 *.{jpg,png,gif}
Далее, используйте find
для передачи списка каталогов в parallel
.
find /path/to/parent/ -mindepth 1 -type -d -print0 |
parallel -0 -n 1 ./example-wrapper.sh
(опция -mindepth 1
в find
исключает каталог верхнего уровня, т.е. сам родительский каталог)
По умолчанию parallel будет запускать один экземпляр ("задание") ./example-wrapper.sh
для каждого имеющегося у вас ядра CPU. Каждый экземпляр получит ОДНО (-n 1
) имя каталога. Как только одно задание завершается, запускается другое (если остались еще какие-либо задания для выполнения).
Это позволяет максимально использовать доступную мощность процессора, не позволяя заданиям конкурировать друг с другом за процессорное время.
Вы можете использовать опцию parallel
в -j
для настройки количества заданий, выполняемых одновременно. Для задач, требовательных к процессору, вероятно, подойдет значение по умолчанию - одно задание на ядро системы.
Если ваши задания не очень требовательны к процессору, но более привязаны к вводу-выводу, вам, возможно, потребуется запустить 2-3 задания на каждое ядро (в зависимости от размера входных файлов, скорости хранения данных и типа устройств хранения - например, SSD не страдают от задержки поиска, поэтому не будут замедлены несколькими процессами, ищущими данные по всему диску. Жесткие диски страдают от времени поиска и будут замедляться от того, что их заставляют беспорядочно искать данные по всему диску - дисковая буферизация/кэширование в Linux поможет, но не устранит проблему).
Если вы хотите выполнять другую работу (например, обычное использование рабочего стола) во время выполнения этих заданий, используйте -j
, чтобы указать parallel
использовать на одно или два ядра меньше, чем у вашей системы (например, -j 6
на 8-ядерной системе).
ПРИМЕЧАНИЕ: Настройка параллельных процессов - это тонкое искусство, и для получения наилучших результатов может потребоваться несколько экспериментов.
В любом случае, из man parallel
:
--jobs N
,-j N
,--max-procs N
,-P N
Количество рабочих мест. Параллельно выполняется до N заданий. 0 означает как можно больше. По умолчанию - 100%, при котором будет выполняться одно задание на ядро процессора.
Если
--semaphore
установлен, то по умолчанию это 1, что создает мьютекс.
Это действительно базовое и примитивное использование parallel
. Он может делать гораздо больше. Подробности смотрите в man-странице.
BTW, xargs
также имеет опцию -P
для параллельного выполнения заданий. Для простого использования, подобного этому, не имеет особого значения, используете ли вы xargs -P
или parallel
. Но если ваши требования сложнее, используйте parallel
.
parallel
должен быть упакован для большинства дистрибутивов linux, в противном случае он доступен по адресу https://www.gnu.org/software/parallel/
Parted на самом деле не создает файловую систему. Он только создает раздел. Тип файловой системы, который вы передаете в mkpart
, нигде не записывается.
Когда вы просите parted распечатать информацию, он смотрит на содержимое раздела. Похоже, что раньше у вас была файловая система xfs в разделе, начинающемся в том же месте, что и ваш текущий раздел номер 1. Поскольку вы еще не записали никакого содержимого в раздел, старое содержимое все еще там. Если файловая система xfs была менее 6001 ГБ, и если там действительно была файловая система, а не совпадение (например, начало файла образа файловой системы, которое оказалось точно в этой позиции), он все еще действителен и может быть смонтирован.
Так зачем вообще указывать тип файловой системы при запуске mkpart
? Воздействие зависит от формата раздела. В разделах GPT тип файловой системы используется для определения типа раздела. ntfs
устанавливает тип раздела на GUID, используемый Windows, swap
устанавливает тип раздела на GUID для свопа и т. Д. По умолчанию, для которого отображаются как xfs, так и ext4, установить GUID для данных Linux. Это один и тот же GUID независимо от типа файловой системы, что имеет смысл, поскольку GUID должен указывать, что хранится в разделе (например, файлы Linux), а не то, как они организованы.