Linux zip без полного пути

Сжатие tar и gzip, без путей

Нужно производить архивацию содержимого папки /home/user/new/*. Выполняю команду: tar -czf /home/backup/user.tar.gz /home/user/new/*

Архив создаётся, но при распаковке архива образуется полное дерево по которому лежали файлы пользователя, т.е. выполняю: tar xvfz user.tar.gz

и он распаковывает с видом: /home/user/new/файлы.

Каким образом сделать только файлы? Что бы путь где они были не фигурировал?

cd /home/user/new
tar -czf /home/backup/user.tar.gz *
?

Нужно это дело запускать из под Cron будет.

Так запихни это в скрипт 😉

Ну или если лень, то раздели команды точкой с запятой.

Для распаковки работает, для упаковки тоже должно.

1) «папки» — в венде

Решил проблему путём написания такого скрипта и задал на выполнение Cron’ом.

#!/bin/sh cd /home/vmail/nstp-nn.ru/backup/Maildir/new tar -czf /home/backup/`date +%Y-%m-%d`.tar.gz *

cd /home/user/new/
tar -cvf /путь/куда/надо/сохранить/файл.tar `ls`

Источник

Архивация zip без сохранения полного пути

Мне надо архивировать несколько директорий с помощью команды zip. Пусть этими директориями будут /home/user/dir1 и /home/user/dir2. В команду я вставляю полные пути (это важно, т.к. команду я хочу вставить в скрипт). После архивации я открываю архив и вижу там директорию home, в ней директорию user и лишь в ней нужные мне dir1 и dir2. Как сделать чтобы лишние директории не сохранялись и при открытии сразу были dir1 и dir2, прямо в корне архива? Я понимаю, что можно в скрипте сохранить текущую директорию, перейти туда где лежит архивируемая директория и архивировать от туда, но неужели у zip нет подходящего аргумента, чтобы не усложнять скрипт?

Заменил zip на 7z. Теперь всё работает как я хочу, хотя я немного разочарован, что в zip не нашлось такого аргумента.

-j —junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).

просто читать надо уметь. разочарован он.

просто читать надо уметь. разочарован он.

–junk-paths вывалит в архив фарш из файлов вообще игнорируя пути. А ТСу нужно отсечь префикс пути, но сохранить структуру каталогов.

Похоже, поучиться читать нужно не ТСу.

Так сам бы попробовал этот аргумент. Он просто удаляет ВСЕ директории и скидывает все файлы со всех директорий в корень архива. Мне не надо убирать иерархию совсем, я просто хочу чтобы она начиналась нужного места, а не от корня.

Читайте также:  Управление службой печати windows

Прежде чем что-то писать, сам бы почитал, что оно делает, неуч. ТСу нужен переход в директорию перед архивированием, так же как с tar -C , но в zip такой нет, поэтому только костылять предварительный переход по абсолютному пути с cd , а потом архивация.

то есть ты хочешь магическую опцию, которая отрежет тебе /home/user/ от /home/user/dir1 и /home/user/dir2, иными словами чтобы ты смог запустить zip —option=/home/user/ blah-blah. волшебная опция в таком случае – cd &&.

нет смысла передавать zip ровно то, что ты можешь передать cd.

tar -C – это лучший способ выстрелить себе в ногу, какой только можно придумать с таром, единственное её допустимое использование -C /

Источник

Tar каталог, но не храните полные абсолютные пути в архиве

У меня есть следующая команда в части резервного сценария оболочки:

Когда я перечисляю содержимое архива, я получаю:

Но я хотел бы удалить часть /var/www/site1 из каталогов и имен файлов в архиве, чтобы упростить извлечение и избежать бесполезной постоянной структуры каталогов. Никогда не знаю, на случай, если бы я извлек резервные копии сайтов в месте, где веб-данные не были сохранены /var/www .

Для примера выше, я хотел бы иметь:

Таким образом, когда я извлекаю, файлы извлекаются в текущем каталоге, и мне не нужно перемещать извлеченные файлы впоследствии, и таким образом структуры подкаталогов сохраняются.

Уже есть много вопросов о tar и резервном копировании в stackoverflow и в других местах в сети, но большинство из них просят удалить всю структуру подкаталогов (выравнивание) или просто добавить или удалить начальные / в именах (я не не знаю, что именно меняется при извлечении), но не более.

Прочитав некоторые решения, найденные здесь и там, а также руководство, я попытался:

Но никто из них не работал так, как я хочу. Некоторые ничего не делают, другие больше не архивируют подкаталоги.

Он находится внутри скрипта резервного копирования, запущенного Cron, поэтому я не знаю, какой пользователь его запускает, каков путь и текущий каталог, поэтому для всех требуется всегда писать абсолютный путь, и я бы предпочел не менять текущий каталог чтобы не допустить дальнейших ошибок в скрипте (поскольку он не только создает резервные копии веб-сайтов, но и баз данных, а затем отправляет все это на FTP и т. д.)

Как этого добиться?

Я просто неправильно понял, как работает опция -C?

Источник

tar убрать полный путь

исходная команда tar cf — /home/user/Pictures/|pigz>Pictures.tar.gz
в архиве получаю путь /home/user/Pictures
как убрать путь? в идеале пусть файлы будут сразу в корне архива
пробовал пихать параметр -С но не получилось

Читайте также:  Connecting to windows desktop from linux

Интересный у тебя tar. gnu tar отбрасывает /, и есть опция отключающая такое поведение.

выполни «tar -C /home/user/Pictures -cf — . | tar tvf -»

а без дублирования tar никак?

второй tar просто показывает какие имена в архиве. для архивирования он естественно не нужен.

Откуда вы вообще это pigz выкопали? Уже за сегодня второй раз с похожими вопросами.

30 лет назад такая задача была в документации по Unix, как щас помню:

так вроде многопоточно сжимает в отличие от gzip

так вроде многопоточно сжимает в отличие от gzip

А вы найдите компьютеру ещё применение, чего он простаивает, что надо его загружать несколькими потоками 🙂

Откуда вы вообще это pigz выкопали?

Там же, где и pbzip2 вместе с pxz 🙂

Вас ещё на bsdtar не тренировали?
Быстро, стильно, молодёжно!

А как же, пока Linux не изобрели на BSD же сидел. Намекаете на ‘z’ ключик чтоли?

Да, и не только.
bsdtar — всё же превосходит gnu tar, как инструмент распаковки и упаковки файлов/директорий.

И, переходя непосредственно к теме топика,
если есть необходимость распаковать на выбор файлы из архива, то это делается с ключом bsdtar -t ‘*/some_files_dir/*’ и mv some_files_dir destination_dir.
Повторно использовать архиватор нет нужды.

bsdtar — всё же превосходит gnu tar, как инструмент распаковки и упаковки

Ой. Да к чему тут эти религиозные войны? Совершенно глупейший оффтопик.

Для запаковки давно пора использовать zstd.

Параллельная запаковка для очень специфичных случаев (обычно либо не важно сколько она продлиться с фоне, либо упираешься во ввод/вывод).

Источник

Как заархивировать файлы и каталоги в Linux

Zip — это наиболее широко используемый формат архивных файлов, поддерживающий сжатие данных без потерь.

Zip-файл — это контейнер данных, содержащий один или несколько сжатых файлов или каталогов. Сжатые (заархивированные) файлы занимают меньше места на диске, их можно перенести с одного компьютера на другой быстрее, чем несжатые файлы. Zip-файлы можно легко извлечь в Windows, macOS и Linux с помощью утилит, доступных для всех операционных систем.

В этом руководстве мы покажем вам, как архивировать (сжимать) файлы и каталоги в Linux с помощью команды zip .

zip Команда

zip — это утилита командной строки, которая помогает создавать Zip-архивы.

Команда zip имеет следующий синтаксис:

Чтобы создать Zip-архив в определенном каталоге, пользователю необходимо иметь права на запись в этот каталог.

Zip-файлы не поддерживают информацию о владельце в стиле Linux. Извлеченные файлы принадлежат пользователю, выполняющему команду.

Чтобы сохранить право собственности на файл и права доступа, используйте команду tar .

Утилита zip не устанавливается по умолчанию в большинстве дистрибутивов Linux, но вы можете легко установить ее с помощью диспетчера пакетов вашего дистрибутива.

Читайте также:  Windows new download free

Установите Zip в Ubuntu и Debian

Установите Zip на CentOS и Fedora

Как архивировать файлы и каталоги

Чтобы заархивировать один или несколько файлов, укажите файлы, которые вы хотите добавить в архив, через пробел, как показано ниже:

По умолчанию команда zip печатает имена файлов, добавленных в архив, и метод сжатия. Мы объясним методы и уровень сжатия позже в этом руководстве.

При указании имени архива Zip, если вы опускаете расширение .zip оно будет добавлено автоматически, если имя архива не содержит точки. zip archivename.zip filename создаст архив с тем же именем, что и zip archivename filename .

Чтобы подавить вывод команды zip , используйте параметр -q :

Часто вы создаете Zip-архив каталога, включающего содержимое подкаталогов. Параметр -r позволяет рекурсивно просматривать всю структуру каталогов.

Чтобы создать Zip-архив каталога, вы должны использовать:

Вы также можете добавить несколько файлов и каталогов в один архив:

Методы и уровни сжатия

Метод сжатия Zip по умолчанию — deflate . Если утилита zip определяет, что файл нельзя сжать, она просто сохраняет файл в архиве, не сжимая его с помощью метода store . В большинстве дистрибутивов Linux утилита zip также поддерживает метод сжатия bzip2 .

Чтобы указать метод сжатия, используйте параметр -Z .

Команда zip позволяет указать уровень сжатия с помощью числа с префиксом от 0 до 9. Уровень сжатия по умолчанию -6 . При использовании -0 все файлы будут сохраняться без сжатия. -9 заставит команду zip использовать оптимальное сжатие для всех файлов.

Например, чтобы использовать уровень сжатия -9 , введите что-то вроде этого:

Чем выше уровень сжатия, тем интенсивнее процесс архивирования, и для его завершения потребуется больше времени.

Создание ZIP-файла, защищенного паролем

Если у вас есть конфиденциальная информация, которую необходимо сохранить в архиве, вы можете зашифровать ее с помощью параметра -e :

Вам будет предложено ввести и подтвердить пароль архива:

Создание разделенного Zip-файла

Представьте, что вы хотите сохранить Zip-архив на сервисе хостинга файлов, который имеет ограничение на размер загружаемого файла 1 ГБ, а ваш Zip-архив — 5 ГБ.

Вы можете создать новый разделенный Zip-файл, используя параметр -s с указанием размера. Множитель может быть k (килобайты), m (мегабайты), g (гигабайты) или t (терабайты).

Приведенная выше команда продолжит создание новых архивов в наборе после достижения указанного предельного размера.

Примеры ZIP

Создайте Zip-архив с именем archivename.zip, содержащий все файлы в текущем каталоге.

То же, что и выше, включая скрытые файлы (файлы, начинающиеся с точки):

Создайте Zip-архив с именем archivename.zip содержащий все файлы MP3 в текущем каталоге, без сжатия файлов.

Выводы

В Linux вы можете создавать Zip-архивы с помощью команды zip .

Чтобы распаковать ZIP-архив в системе Linux, вы можете использовать команду unzip .

Если вы хотите узнать больше о Zip, посетите страницу Zip Man .

Источник

Оцените статью