Что означает --strip-components -C в tar?

Если вы разделите используемое пространство на общее пространство, вы получите 10485/ (118401+10485 )≈ 0,08135, что округляется до 8,14%.

По умолчанию в файловой системе ext2/ext3/ext4 5% пространства зарезервировано для root. Значение «Доступно», отображаемое командой df, не включает это зарезервированное пространство в общее пространство (, т. е. выполняется расчет на основе 95% общего пространства, то есть все, что не -пользователь root. может использовать ), поэтому вычисление, которое он делает, 10485 / ((118401+10485 )*0,95 )≈ 0,08563, что округляется до 9%.

Зарезервированное пространство позволяет системе продолжать работать некоторое время после того, как оно почти заполнено. Например, логи еще можно некоторое время писать, что может сильно помочь в диагностике того, что заполнило диск. Для раздела, который не содержит /var, зарезервированное пространство менее полезно, но файловая система, заполненная на 95%, скорее всего, в любом случае будет фрагментирована, поэтому для производительности не стоит выходить за рамки этого.

1
15.08.2019, 21:14
3 ответа

Опция --strip-componentsпредназначена для изменения имен извлеченных файлов. --strip-components <N>означает «удалить первые <N>компоненты имени файла», где «компоненты» относятся к частям пути, разделенным /.

Если у вас есть имя файла foo/bar/baz, то с --strip-components 1извлеченный файл будет называться bar/baz.


Опция -Cпросто означает «изменить каталог». Если вы используете -C /some/other/place, вы фактически запрашиваете tarна cd /some/other/placeперед извлечением файлов. Обычно это означает, что файлы будут извлечены относительно /some/other/place.

17
27.01.2020, 23:15

В дополнение к хорошему ответу larsks , чтобы попытаться устранить путаницу вокруг опции -C:

На справочной странице tarуказано для параметра -C:

-C, --directory=DIR
              Change  to DIR before performing any operations.  This option is
              order-sensitive, i.e. it affects all options that follow.

так что это не похоже на mv-, это буквально говорит tarперейти в другой рабочий каталог. Также обратите внимание на то, что порядок имеет значение. Так:

tar r -f archive.tar -C /path file1 file2

будет добавлять файлы file1и file2в местоположении /pathк archive.tar, в то время как

tar r -f archive.tar file1 file2 -C /path file3 file4

добавит file1и file2из текущего рабочего каталога, а затем file3и file4из местоположения /path.

--strip-componentsи -Cявляются независимыми и не связанными с tarпараметрами.Первый влияет на структуру папок архивных файлов после их извлечения, а -Cуказывает рабочий каталог, который tarиспользует для указания файлов, являющихся внешними по отношению к архиву.

2
26.03.2020, 10:09

Я не уверен, что могу сказать в качестве объяснения это не было охвачено другими ответами. Вместо этого я постараюсь помочь вам с примерами.

Аркадиуш Драбчик приводит пример из руководства GNU tar где ваш архив включает большое дерево каталогов (, например, все /usr):

$ tar -cf usr.tar  /usr

и вы хотите углубиться в архив и извлеките файл из подкаталога нижнего -уровня :

.
$ tar -xf usr.tar --strip=2 usr/include/stdlib.h

Чего в руководстве не сказано, так это того, что если вы скажете

$ tar -xf usr.tar           usr/include/stdlib.h

, затем tarсоздаст каталог usrв текущем каталоге, и подкаталог includeв usr, а затем извлеките stdlib.hв ./usr/include. Если это тот результат, который вы хотите, тогда хорошо; используйте эту команду. Но если вы хотите stdlib.hв текущем каталоге, вам нужно

$ mv usr/include/stdlib.h.

, а затем, вероятно, rmdir -p usr/include. Это выполнимо, но утомительно. --strip=2избавляет вас от необходимости много печатать.


-Cтакже можно использовать с опциейc(нижнего -случая C ). (создание архива ), и это может быть проще понять. Предположим, Джон, Кейт, Ларри и Мэри совместно пишут книгу; они пишут главы 1, 2, 3 и 4 соответственно. Джон и Кейт (только )используют один и тот же компьютер, и они хотят заархивировать то, что уже сделали отправить другим авторам. Вы можете сделать одно из следующих действий :

  (cd to some suitable directory)
$ tar cf chap12.tar /home/john/chap1 /home/kate/chap2
или
$ cd /home
$ tar cf /tmp/chap12.tar john/chap1 kate/chap2

Но они создают архив, который кодирует пути к каталогам john/и kate/.Если вы это сделаете,это было бы причиной для Ларри и Мэри использовать --strip=2или --strip=1при извлечении архива.Если вы хотите спасти их, которые беспокоят (и/или не храните свои имена в архиве; например, по соображениям конфиденциальности ), то вы можете

  (cd to some suitable directory)
$ tar cf chap12.tar -C /home/john chap1 -C /home/kate chap2

и тогда в архиве будут показаны только каталоги chap1и chap2.

0
28.03.2020, 16:41

Теги

Похожие вопросы