LINUX.ORG.RU

История изменений

Исправление 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 и т д, возможно добавлю в статусный файл имя архива, где лежит последняя версия этого файла...