История изменений
Исправление vodz, (текущая версия) :
Вообще, впервые узнаю, что имя файла может содержать '\n'.
Ну так запрещен только '\0' и с оговорками '/'. Но, впрочем, тогда надо для tar формировать список «null-terminated names» и вызывать с флагом --null.
LC_ALL=C разве это не решает?
Нет, это другое, у вас только для сортировки даст эффект: будет сортировать по значению побайтно. Имелось в виду, что с нулями раньше обычное дело, когда всё либо игнорировалось, либо глючило. Я вот не уверен насчёт утилит sort/comm/awk из busybox.
Запускать по процессу на каждый файл - как-то не очень, особенно, когда их в сумме много тысяч.
Я у себя проверил, разница впечатляющая, где-то в 60 раз на моём полном списке файлов от корня. Но, в абсолютном выражении это всё равно 10 секунд против 0.1 секунды. Ну 10 секунд не бог весь какое время. Но, собственно, я же обосновал, почему к этому всегда приходят. Как только скрипт вылезает из режима простейший однострочник, то сразу появляется необходимость всё делать самому руками, так как все хотелки внешним программам невозможно никакими ключами объяснить. У find можно отключить сканирование других файловых систем, отличных от текущей, но вот исключить не все, а по списку — уже нет такой опции.
Ещё с атрибутами теперь пишутся права (chmod), UID и GID
Да, я тоже об этом подумал.
А вообще, если время будет, я перепишу на ассоциативных массивах, выкину sort | comm и временные файлы, добавлю по умолчанию запрет сканирования /proc /tmp и т д, возможно добавлю в статусный файл имя архива, где лежит последняя версия конкретного файла...
Исходная версия vodz, :
Вообще, впервые узнаю, что имя файла может содержать '\n'.
Ну так запрещен только '\0' и с оговорками '/'. Но, впрочем, тогда надо для tar формировать список «null-terminated names» и вызывать с флагом --null.
LC_ALL=C разве это не решает?
Нет, это другое, у вас только для сортировки даст эффект: будет сортировать по значению побайтно. Имелось в виду, что с нулями раньше обычное дело, когда всё либо игнорировалось, либо глючило. Я вот не уверен насчёт утилит sort/comm/awk из busybox.
Запускать по процессу на каждый файл - как-то не очень, особенно, когда их в сумме много тысяч.
Я у себя проверил, разница впечатляющая, где-то в 60 раз на моём полном списке файлов от корня. Но, в абсолютном выражении это всё равно 10 секунд против 0.1 секунды. Ну 10 секунд не бог весь какое время. Но, собственно, я же обосновал, почему к этому всегда приходят. Как только скрипт вылезает из режима простейший однострочник, то сразу появляется необходимость всё делать самому руками, так как все хотелки внешним программам невозможно никакими ключами объяснить. У find можно отключить сканирование других файловых систем, отличных от текущей, но вот исключить не все, а по списку — уже нет такой опции.
Ещё с атрибутами теперь пишутся права (chmod), UID и GID
Да, я тоже об этом подумал.
А вообще, если время будет, я перепишу на ассоциативных массивах, выкину sort | comm и временные файлы, добавлю по умолчанию запрет сканирования /proc /tmp и т д, возможно добавлю в статусный файл имя архива, где лежит последняя версия этого файла...