sed: аргумент список слишком длинный при запуске sed -n - PullRequest
1 голос
/ 31 мая 2019

Я запускаю эту команду из Почему мой репозиторий git такой большой? в очень большом репозитории git как https://github.com/python/cpython git rev-list --all --objects | sed -n $(git rev-list --objects --all | cut -f1 -d' ' | git cat-file --batch-check | grep blob | sort -n -k 3 | tail -n800 | while read hash type size; do size_in_kibibytes=$(echo $size | awk '{ foo = $1 / 1024 ; print foo "KiB" }'); echo -n "-e s/$hash/$size_in_kibibytes/p "; done) | sort -n -k1;

Работает нормально, если заменить tail -n800 на tail -n40:

1160.94KiB Lib/ensurepip/_bundled/pip-8.0.2-py2.py3-none-any.whl
1169.59KiB Lib/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl
1170.86KiB Lib/ensurepip/_bundled/pip-8.1.2-py2.py3-none-any.whl
1225.24KiB Lib/ensurepip/_bundled/pip-9.0.0-py2.py3-none-any.whl
...

Я нашел этот вопрос Bash: sed -n arguments , говорящий, что я мог бы использовать awk вместо sed.

Знаете ли вы, как исправить это sed: Argument list too long, когда tail равно -n800 вместо -n40?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Кажется, вы использовали этот ответ в связанном вопросе: Некоторые скрипты, которые я использую: ... . В этом ответе есть заметный комментарий:

Эта функция великолепна, но она невероятно медленная. Это не может даже закончиться на моем компьютере, если я уберу ограничение в 40 строк. К вашему сведению, я только что добавил ответ с более эффективной версией этой функции. Проверьте это, если вы хотите использовать эту логику в большом хранилище, или если вы хотите увидеть размеры, суммированные для файла или для папки. - piojo 28 июля 17 года в 7:59

И, к счастью, Пихо написал еще один ответ на этот вопрос. Просто используйте его код.

1 голос
/ 31 мая 2019

В качестве альтернативы проверьте, будет ли git sizer работать в вашем хранилище: это поможет изолировать то, что происходит в вашем хранилище.

Если нет, у вас есть другие команды в " Как найти / идентифицировать большие коммиты в истории git?", которые зацикливаются вокруг каждого объекта и избегают sed -nxx part

Альтернативой может быть перенаправление вашего результата / команды нафайл, затем sed в этом файле, как здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...