Мой ответ ниже должен быть неправильным, я перепутал дату: новый второй прыжок был вставлен 30 июня 2012 в 23:59:60 UTC. Не 18-го июня.
Прыжок, второй, который был представлен в тот день.
Секунды прыжка не так предсказуемы как високосные годы, они обычно вызываются из-за больших наземных землетрясений, цунами... такая вещь. Где високосный год довольно предсказуем (о каждых четырех годах), второй прыжок не. Существует комиссия ярких мозгов людей (я верю в ООН), которые решают, там должен быть представлен второй прыжок. Это может только быть предсказано приблизительно 60 дней заранее. Многим системам не нравится, когда время проходит от...:59 до...:60 прежде, чем идти в...:00. Базам данных не нравится время, задержанное секунда, они действительно требовательны в отношении меток времени, происходящих только однажды.
https://en.wikipedia.org/wiki/Leap_second#Announcement_of_leap_seconds
Не уверенный, почему Вы получаете ту ошибку.
find ./subdir/* -print0
(принятие --print0
если бы опечатка был), то произвел бы большую ненагруженную линию с несколькими символами NUL в нем. Поскольку это не заканчивается в символе новой строки и потому что это содержит символы NUL, это не текст, таким образом, поведение текстовых утилит как sort
является неуказанным там. Вид GNU, рассматривал бы его как одну большую строку и добавил бы назад недостающую новую строку.
Возможно, Вы используете busybox sort
который насколько я могу сказать обработкам те символы NUL на входе как разделители строки также, но выходные строки, завершенные символами новой строки.
xargs -0
ожидает, что NUL разделил записи. Таким образом с видом GNU, xargs
рассматривал бы sort
вывод как тот же список, как сгенерировано find -print0
плюс на побочном элементе, состоящем который дополнительный символ новой строки, добавленный sort
.
В случае busybox sort
, потому что все NULs были преобразованы в новые строки, до существует только одна запись xargs -0
может сказать, таким образом, это будет звонить cat
с одним огромным именем файла, содержащим символы новой строки.
Здесь, если Вы хотите отсортировать список имен файлов, Вам нужен любой для использования GNU sort
с -z
опция:
find subdir -type f -print0 | sort -z | xargs -r0 cat > merge.txt
Или предположите, что имена файлов не содержат символы новой строки и работают:
find subdir -type f | sort | tr '\n' '\0' | xargs -r0 cat > merge.txt
Так как Вы использовали zsh
тег, можно также выполнить во всем zsh
:
autoload zargs
zargs subdir/**/*(D.) -- cat > merge.txt
Который на самом деле предоставит Вам порядок сортировки ближе к тому, что Вы ищете.
xargs
' -0
аргумент для того, когда вход NUL-разделяется, который это не. Если Вы хотите, чтобы это работало, необходимо отделиться с NULs в предыдущих командах. К сожалению, кажется, нет никакого способа сделать этот POSIX совместимым:
find ./subdir/* -print0 | sort -z | xargs -0 cat -- > full_merge.txt
xargs
не поддерживает -0
все же.
– l0b0
28.05.2013, 17:57
sort
не требуется, чтобы обрабатывать нетекстовые данные. И -t
должен указать разделителя полей, не строку/разделитель записей.
– Stéphane Chazelas
28.05.2013, 19:16