Sed: слишком длинный список аргументов при запуске sed -n

Я запускаю эту команду из Почему мой репозиторий 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, в котором говорилось, что я могу использовать awk вместо sed.

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

Если вы опубликуете свои данные и то, что хотите из них получить, мы можем помочь сократить эту длинную строку команд. Все, что делается с помощью cut, grep, sed, sort, tail, print и awk, можно сделать с помощью всего одного awk

Jotne 31.05.2019 07:17

Вы можете увидеть ошибку, просто клонировав репозиторий cpython, указанный в вопросе, и выполнив команду в клонированном репозитории. В вопросе также есть пример вывода, когда хвост -n800 заменяется хвостом -n40

user 31.05.2019 07:20

Причина, по которой вы получаете эту ошибку, заключается в том, что вы пытаетесь передать sed больше аргументов, чем поддерживает ваша система.

torek 31.05.2019 10:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
329
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

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

This function is great, but it's unimaginably slow. It can't even finish on my computer if I remove the 40 line limit. FYI, I just added an answer with a more efficient version of this function. Check it out if you want to use this logic on a big repository, or if you want to see the sizes summed per file or per folder. – piojo Jul 28 '17 at 7:59

И, к счастью, у piojo есть написал другой ответ для решения этой проблемы. Просто используйте его код.

Я хотел бы однострочник только для быстрого копирования и вставки.

user 01.06.2019 05:27

Вы можете адаптировать псевдоним в связанном ответе.

A.H. 01.06.2019 18:05

Другие вопросы по теме