Подобные вопросы задавались и раньше. Ближайшим из них является Как смонтировать несколько каталогов в одном разделе? где этот принятый в настоящее время ответ предполагает, что это может быть двумя способами:
Использование четырех _символических ссылок: в корневая файловая система, указывающая на четыре отдельных поддерева на втором диске, который сам монтируется один раз в точку монтирования независимо от четырех каталогов.
Использование bind mounts (доступно начиная с Linux 2.4) для монтирования четырех отдельных поддеревьев на втором диске в четыре каталога после того, как второй диск будет впервые смонтирован в точку монтирования, независимую от четырех каталогов.
В том же ответе есть интересный комментарий, который указывает на этот вопрос и ответ, в котором обсуждаются плюсы и минусы символических ссылок и креплений привязки . Из этого можно заключить, что символические ссылки должны быть предпочтительнее, потому что их легче увидеть и поддерживать, и они не вызовут проблем с любым существующим программным обеспечением.
Однако systemd
имеет функцию явной конфигурации зависимостей, называемую RequiresMountsFor
. Например. стандартный Debian 8 (Jessie) использует его, чтобы заставить некоторые службы ждать потенциальных монтирований / var
, которые должны быть доступны для рассматриваемых служб.
systemd
RequiresMountsFor
будет работать только с привязками ; не с символическими ссылками .
По крайней мере, файлы конфигурации службы Debian 8 systemd
, о которых идет речь, находятся в / lib / systemd
, поэтому их нельзя изменять. Это говорит о том, что bind mounts предпочтительнее, если вы используете дистрибутив Linux, который вводит такие зависимости systemd
. Изменение конфигурации systemd
дистрибутива Linux может превратить обслуживание системы в кошмар.
Само присутствие systemd
, с другой стороны, не является аргументом в пользу выбора между символическими ссылками и привязками .
Из справочной страницы zip:
Streaming input and output. zip will also accept a single dash ("-") as the zip file name, in which case it will write the zip file to standard output, allowing the output to be piped to another program.
Так:
$ zip -r - foo | wc -c
Сообщит вам размер сжатого каталога foo в байтах.
7z не может записывать в стандартный вывод zip-файлы.
Другой альтернативой является создание диска памяти и сжатие на него.
Делать
tar cf >(wc -c) <file_name_arguments>; sleep 1Вместо записи в файл,
tar
запишет в канал команду wc -c
, который сообщит о количестве записанных в него байтов. (Включите любые tar
параметры, необходимые для сжатия. )При этом используется функция «замены процесса» bash. Используйте sleep 1
, потому что без него ваша оболочка выдаст следующее приглашение оболочки когда команда tar
завершится, и не будет ждать завершения команды wc
. Если у вас нет bash, вы, вероятно, можете сделать то же самое с именованным каналом.
Вы можете сжимать в StdOut и подсчитывать байты, но AFAIK zip
не сжимает в stdout (, как и 7z
, другая утилита, которая может создавать ZIP-формат )(*).
В Linux вы обычно создаете файлы.tar.gz, а утилиты выводят на стандартный вывод, если выходной файл не указан:
# compute size
outputSize=$(tar -cz the_directories | wc -c)
# create file
tar -czf some.tar.gz the_directories
Обратите внимание, что в любом случае, если вы выполняете сжатие дважды, вы не можете реально предсказать размер вывода без выполнения преобразования.
(*)возможно, из-за того, что вы не можете декодировать ZIP-файл, не увидев сначала конец.