Unix найти на 6T диске, занимающем 14 часов: csh - PullRequest
0 голосов
/ 25 октября 2018

У меня есть сценарий csh с приведенными ниже строками для записи имени пользователя, файла и размера на данном диске.Это работало нормально, пока не достигло предела емкости на диске 6T, который содержит более 5,5 миллионов файлов только для одного пользователя.Как мне изменить эту строку, чтобы ускорить время выполнения.В настоящее время занимает 14-15 часов на этой линии.

set len = ()
foreach i ( `find $cwd -not -path '*/\.*' -printf "%u\n" | sort -u` ) 
        set len = ($len:q `find $cwd -user $i | wc -l`)
end
find $cwd -printf "%u %s\n" | awk '{user[$1]+=$2;count[$1]++}; END{ for( i in user) printf "%s%-13s%5s%-0.2f%s%5s%7s\n","", i, "", user[i]/1024**3,"GB", "", count[i]}'| sort -nk2 -r

1 Ответ

0 голосов
/ 26 октября 2018

Если вы используете выполнение команды для ввода данных оболочки, вы в основном создаете строку сценария оболочки длиной в 5,5 миллионов раз.Это нужно проанализировать и т. Д.

Поэтому ответ состоит в том, чтобы переписать ваши сценарии по-другому.Либо используйте трубы, например

find ... | {shell code}

или

find ... -exec {script} \;

Общий способ выразить первое:

find ... | xargs ...

Прелесть xargs в том, что он можетВыполните ряд команд параллельно с -P maxprops, ускоряя ваши вычисления.

Другой совет - не использовать csh (или какую-либо другую оболочку) для таких вычислительных сценариев.

Задача, которую вы здесь выполняете, больше подходит для языка сценариев, такого как Perl или Python.

...