Что: d5670fc7a83b5161ebbb4f7b9cdaf34f3edf3a94
Когда: 2021-12-16 14:15:26+03:00
Темы: hate tip
Снова tar c|tar x vs cp В dd558b2a665788dfa4a15024397060615bd86d98 уже упоминал про "cp -a": без этой опции cp будет "терять" всё на свете о файле, кроме его содержимого (например mtime (863f4e1fadabacdb2de4d6493ba96880e20eb0e8)). А сегодня обнаружил (это не было новостью -- просто не задумывался прежде) что сохранить жёсткие ссылки с ним нельзя. Ни в коем случае для серьёзного backup-а cp использовать нельзя. И опять же спасает например tar/cpio/pax, которые без дополнительных опций будут сохранять информацию о таких ссылках в архиве и при разархивировании воссоздавать их. Вот только с tar-ом обнаружил неприятную особенность: в нём можно указать ("T") список путей которые надо добавить в архив, но директории в нём он рекурсивно добавляет в архив. Например: find . -type d -mindepth 1 | tar cfT - - | ... в архив не поместит только сами директории, но и их содержимое. В POSIX tar команде ничего нет чтобы могло помочь. В GNU tar есть --no-recursion. В BSD tar есть -n, --norecurse, --no-recursion. Портабельной опции для find -d | tar нету. cpio мог бы тут помочь. Но у самого cpio формата сильные ограничения (например на размер файла). pax, с точки зрения POSIX, был бы тут идеален и интерфейсом (копировать файлы можно без pipe-а вызывая pax -rw) и форматом, но он из коробки нигде не присутствует. А если и имеется, то зачастую не имеет поддержки pax формата. Так какую же команду можно использовать для создания архива без ограничений (типа размера), чтобы find-ом можно было только директории предоставить например? Никакую :-). Не вижу тут решения. Всё не портабельное или не присутствует гарантированно в ОС (pax). В FreeBSD cpio команда то на самом деле использует libarchive и поэтому может создавать pax-архивы. На практике для конкретных систем -- возможности то имеются.
Сгенерирован: SGBlog 0.34.0