Как сохранить новые строки в xargs -I {}

В моем случае я изменил /tmpразрешения по умолчанию для каталога (Думаю, я изменил по ошибке на 0777 ).

Решение состояло в том, чтобы вернуться к разрешению по умолчанию /tmp, которое равно 1777 в восьмеричной системе (1=липкий бит, 7=R+W+X ).

Короче говоря, sudo chmod -R 1777 /tmpдолжен решить проблему.

1
26.11.2019, 20:31
1 ответ

Если вы тестируете это с

echo $ALL_FOUND_LINES

тогда я не удивлен, что все новые строки исчезли, так как оболочка разделила значение в $ALL_FOUND_LINESна пробелы, табуляции и новые строки (по умолчанию )на слова (, а затем дополнительно расширила каждое слово с помощью генерации имени файла (подстановки )). Это происходит потому, что расширение не заключено в кавычки. Затем утилита echoполучает список слов, которые она печатает в одной строке.

Лучшим тестом было бы

printf '%s\n' "$ALL_FOUND_LINES"

Обратите внимание на заключение расширения переменной в кавычки. О выборе printfвместо echoсм. . Почему printf лучше, чем echo? .


Ваша команда может быть улучшена до

find "$TEMP" -type f -name 'debug.log*' -exec grep -h -F 'STARTING HOST ' {} +

Здесь, вместо того, чтобы передавать имена файлов в xargs, мы позволяем findвыполнять grepнапрямую для максимально возможного количества debug.log*файлов одновременно. Обратите внимание, что избавление от xargsне решит вашу проблему с новой строкой, так как xargsне имеет к этому никакого отношения. Это немного ускорит работу, так как требует меньше вызовов grep.

См. также Описание опции -exec команды `find`.

Если вам нужно что-то сделать с каждой из найденных строк, то вы можете перебрать их вот так:

find "$TEMP" -type f -name 'debug.log*' -exec grep -h -F 'STARTING HOST ' {} + |
while IFS= read -r line; do
    # use "$line" here (with quotes)
done

(или замените цикл while на любой другой шаг обработки, который вам нужно выполнить ).Таким образом, нет необходимости хранить все данные в переменной в виде строки с разделителями новой строки -.

См. также Понимание "IFS= чтение -r строки"

3
27.01.2020, 23:29

Теги

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