Как разделить массив в наборе пяти файлов и загрузить их параллельно?

Ваши синтаксические анализы команды df -t вывод для вычислений количества используемого inodes, т.е. примерно количества файлов, которые были созданы в файловой системе, содержащей этот каталог.

Солярис только сообщает об общем и свободном inodes:

Solaris # df -t /home/jlliagre
rpool1/export/home/jlliagre: 20775669 blocks 20775669 files
                      total: 69672960 blocks 20775865 files

На Linux более близкая команда df -i. IUsed столбец показывает количество используемого inodes и IFree каждый показывает количество свободного inodes.

Linux # df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/root_vg-lv_root
                     1048576   57730  990846    6% /

Таким образом, Linux, эквивалентный из Вашей команды Solaris, был бы:

for i in /opt/aa /opt/aa/data /opt/aa/bb; do
    echo -n "$i "; df -i $i | awk 'NR > 1 {print $2}'
done

Отметьте это если /opt/aa, /opt/aa/data и /opt/aa/bb принадлежите той же файловой системе, число, о котором сообщают, будет тем же для каждого из этих каталогов, которые не могли бы быть тем, что Вы хотите.

2
20.09.2017, 12:55
3 ответа
[117174] Что-то вроде этого:

Чтобы узнать больше:

Посмотрите вводный видеофильм для быстрого введения: [117783]https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Просмотрите учебное пособие (man parallel_tutorial). Командная строка понравится вам за это.

  whereis  -  locate the binary, source, and manual page files for a command

10 секунд установка GNU Parallel:

2
27.01.2020, 22:13
[116447]Попробуйте с ловушкой:[12158]Это решение основано на сигналах, посылаемых обратно в родительский процесс от дочерних процессов после того, как они завершат его работу, в этом случае я использую сигнал [116812]SIGHUP[116813], и объявляю его с:[12159]это означает, что если вы получите [116814]SIGHUP[116815], выполните загрузку [116816]download[116817]. Вы можете удалить его вручную, выполнив сигнал [116818]kill -SIGHUP [116819]. Затем скрипт ждёт в цикле [116820], пока [116821] не поступят сигналы от дочерних процессов.[12160]Caution[12161]Это решение основано на сигнале, который является двухсостоянием, это означает, что если одновременно будет много процессов (время между ловушками будет меньше, чем время обслуживания ловушки), то будет выполнен только первый процесс.[116456].
0
27.01.2020, 22:13
[117448] Для менее сложного решения, вы можете просто извлечь фрагменты массива по пять элементов каждый и запустить команды scp в фоновом режиме.

Используя тот же самый базовый скрипт, который вы написали (но удалив трейлинг [117735].[117736] в конце команды [117737]scp[117738], так как это предположительно опечатка):

defaults write com.apple.dock single-app -bool false
killall dock

CAVEAT: В тех случаях, когда длина массива не делится чисто на 5, вы можете запустить 6-й процесс scp, чтобы получить удушающие элементы. Например:

Вышеуказанное выдаст 6 строк:

0
27.01.2020, 22:13

Теги

Похожие вопросы