Linux zip относительные пути
Сжатые файлы занимают меньше места на диске и загружаются из сети быстрее, чем большие, несжатые файлы. Вы можете сжать файлы Linux свободно распространяемыми утилитами сжатия Gzip или Zip , такой формат распознаётся большинством операционных систем.
По умолчанию, сжатые файлы получают расширение .gz . Команда Gzip создаёт сжатый файл с расширением .gz ; Gunzip извлекает сжатые файлы и удаляет файл .gz .
Чтобы сжать файл, в приглашении оболочки введите следующая команду:
Файл будет сжат и сохранён под именем filename.ext.gz .
Чтобы развернуть сжатый файл введите:
Файл filename.ext.gz при этом удаляется и заменяется файлом filename.ext .
Если вы обмениваетесь файлам с пользователям не Linux, вероятно лучше использовать zip , чтобы избежать проблем совместимости. Red Hat Linux может легко открыть zip или gzip файлы, но не Linux операционные системы могут не справиться с файлами gzip.
Чтобы сжать файл с помощью zip , введите:
zip -r filename.zip files
В этом примере filename определяет имя создаваемого файла, а files определяет какие файлы вы хотите включить в архив:
Чтобы извлечь содержимое файла zip, введите:
Вы можете сжать с помощью zip или gzip сразу несколько файлов. Перечислите имена файлов, разделив их пробелами.
gzip filename.gz file1 file2 file3 /user/work/school
Приведённая выше команда сожмёт file1 , file2 , file3 и содержимое каталога /user/work/school и поместит их в файл filename.gz .
Tar сохраняет несколько файлов или содержимое каталога или каталогов в одном файле. Это хороший способ создавать резервные копии и архивы. Обычно файлы, сделанные tar, имеют расширение .tar .
Чтобы создать файл tar, введите:
tar -cvf filename.tar files/directories
В этом примере filename.tar определяет имя создаваемого файла, а files/directories определяет какие файлы или каталоги вы хотите включить в новый архив.
Вы можете использовать абсолютные или относительные пути для этих файлов или каталогов (чтобы узнать больше о путях, обратитесь к разделу Смена каталогов с помощью cd в Главе 10 ). Разделите имена файлов и каталогов пробелами.
В показанном ниже примере показано создание файла с абсолютными путями:
tar -cvf foo.tar /home/mine/work /home/mine/school
Указанная выше команда поместит все файлы каталога /work и подкаталога /school в новый файл foo.tar в текущем рабочем каталоге.
Команда tar -cvf foo.tar file1.txt file2.txt file3.txt поместит файлы: file1.txt , file2.txt и file3.txt в новый файл foo.tar .
Чтобы просмотреть содержимое файла tar, введите:
Чтобы извлечь содержимое файла tar, введите:
Эта команда не удаляет файл .tar , а извлекает содержимое .tar в текущий рабочий каталог.
Команда tar не автоматического выполняет сжатия файлов. Вы можете сжать файлы tar выполнив:
tar -czvf foo.tar
Сжатые файлы обычно имеют расширение .tgz и сжимаются при помощи gzip.
Источник
Сжатие 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 вывалит в архив фарш из файлов вообще игнорируя пути. А ТСу нужно отсечь префикс пути, но сохранить структуру каталогов.
Похоже, поучиться читать нужно не ТСу.
Так сам бы попробовал этот аргумент. Он просто удаляет ВСЕ директории и скидывает все файлы со всех директорий в корень архива. Мне не надо убирать иерархию совсем, я просто хочу чтобы она начиналась нужного места, а не от корня.
Прежде чем что-то писать, сам бы почитал, что оно делает, неуч. ТСу нужен переход в директорию перед архивированием, так же как с tar -C , но в zip такой нет, поэтому только костылять предварительный переход по абсолютному пути с cd , а потом архивация.
то есть ты хочешь магическую опцию, которая отрежет тебе /home/user/ от /home/user/dir1 и /home/user/dir2, иными словами чтобы ты смог запустить zip —option=/home/user/ blah-blah. волшебная опция в таком случае – cd &&.
нет смысла передавать zip ровно то, что ты можешь передать cd.
tar -C – это лучший способ выстрелить себе в ногу, какой только можно придумать с таром, единственное её допустимое использование -C /
Источник
Путь к файлу в Linux
Все файлы в Linux имеют определенный адрес в файловой системе, с помощью которого мы можем получить к ним доступ с помощью файлового менеджера или консольных утилит. Это довольно простая тема, но у многих новичков с этим возникают трудности.
В сегодняшней небольшой заметке мы рассмотрим что такое путь к файлу Linux, каким он может быть, как правильно его писать и многое другое. Если раньше у вас возникали с этим трудности, то после прочтения статьи все станет полностью понятно.
Пути файлов в Linux
Файловая система Linux очень сильно отличается от Windows. Мы не будем рассматривать ее структуру, это было сделано ранее. Мы сосредоточимся на работе с файлами.
Самое главное отличие, в том что адрес файла начинается не с диска, например, C:\ или D:\ как это происходит в Windows, а с корня, корневого системного каталога, к которому подключены все другие. Его адрес — /. И тут нужно сказать про адреса. Пути файлов linux используют прямой слеш «/» для разделения каталогов в адресе, и это отличается от того, что вы привыкли видеть в Windows — \.
Например, если в Windows полный путь к файлу на рабочем столе выглядел C:\Users\Sergiy\Desktop\ то в путь файла в linux будет просто /home/sergiy/desktop/. С этим пока все просто и понятно. Но проблемы возникают дальше.
В операционной системе Linux может быть несколько видов путей к файлу. Давайте рассмотрим какие бывают пути в linux:
- Полный, абсолютный путь linux от корня файловой системы — этот путь вы уже видели в примере выше, он начинается от корня «/» и описывает весь путь к файлу;
- Относительный путь linux — это путь к файлу относительно текущей папки, такие пути часто вызывают путаницу.
- Путь относительно домашний папки текущего пользователя. — путь в файловой системе, только не от корня, а от папки текущего пользователя.
Рассмотрим теперь подробнее как выглядят эти пути в linux, а также разберем несколько примеров, чтобы было окончательно понятно. Для демонстрации будем пользоваться утилитой ls, которая предназначена для просмотра содержимого каталогов.
Например, у нас есть такой каталог в домашней папке с четырьмя файлами в нем:
Вот так будет выглядеть полный путь linux к одному из файлов:
Это уже относительный путь linux, который начинается от домашней папки, она обозначается
/. Дальше вы уже можете указывать подпапки, в нашем случае tmp:
Ну или путь файла в linux, относительно текущей папки:
В каждой папке есть две скрытые ссылки, мы сможем их увидеть с помощью ls, выполнив ее с параметром -a:
Первая ссылка указывает на текущую папку (.), вторая (..) указывает на папку уровнем выше. Это открывает еще более широкие возможности для навигации по каталогам. Например, чтобы сослаться на файл в текущей папке можно использовать конструкцию:
Это бесполезно при просмотре содержимого файла. Но очень важно при выполнении программы. Поскольку программа будет сначала искаться в среде PATH, а уже потом в этой папке. А потому, если нужно запустить программу, которая находится в текущей папке и она называется точно также как и та что в каталоге /bin, то без явной ссылки что файл нужно искать в текущей папке ничего не получится.
Вторая ссылка вам позволяет получить доступ к файлам в папке выше текущей. Например:
Такие конструкции могут довольно часто встречаться при компиляции программ. Все эти символы и пути файлов linux вы можете применять не только в терминале, но и в любом файловом менеджере, что может быть очень удобно.
Но терминал Linux предоставляет еще более широкие возможности. Вы можете использовать простые символы замены прямо в адресах файлов или каталогов. Например, можно вывести все файлы, начинающиеся на f:
Или даже можно искать не только в папке tmp, а в любой подпапке домашней папки:
И все это будет работать, возможно, это не всегда нужно и практично. Но в определенных ситуациях может очень сильно помочь. Эти функции реализуются на уровне оболочки Bash, поэтому вы можете применять их в любой команде. Оболочка смотрит сколько файлов было найдено и для каждого из них вызывает команду.
Выводы
Вот и все. Теперь вы знаете все что необходимо, чтобы не только правильно написать путь к файлу linux, но и выполнять более сложные действия, например, поиск файлов или навигация по каталогам с помощью команды cd. Если у вас остались вопросы, спрашивайте в комментариях!
Источник
Архивирование файлов в Linux
В наши дни мы сталкиваемся с файлами архивов очень часто и на всех платформах: Windows, Mac или Linux. Это могут быть программы, резервные копии систем или баз данных или просто архив файлов. Нам также часто приходится создавать свои архивы в Linux, чтобы передать несколько файлов друзьям или загрузить на файлообменник. В виде архивов распространяются пакеты программ, исходные коды, а также много других файлов, распространяемых на просторах интернета. Научиться выполнять архивирование файлов в Linux через терминал очень важно, возможно это вам понадобиться, когда не будет доступа к графическому интерфейсу, или просто со временем в терминале станет более приятно работать.
В этой инструкции я хочу подробно рассмотреть утилиты для архивирования в Linux, мы рассмотрим не только самую популярную и универсальную утилиту — tar, но и другие менее известные, а также популярные алгоритмы сжатия.
Архивирование в Linux
Важно отметить, что архивирование в linux это не одно и то же что и сжатие файлов linux. Архивирование — это объединение нескольких небольших файлов в один, с целю более удобной последующей передачи, хранения, шифрования или сжатия. Как я уже сказал, архивация выполняется специальными утилитами. Мы не будем трогать архивацию файлов в графическом интерфейсе, вы с ними разберетесь сами, наша тема — терминал.
Самой популярной для Linux утилитой для архивации есть tar. Она используется почти везде, для архивации исходников, упаковки пакетов. Для сжатия используются другие утилиты, в зависимости от алгоритма сжатия, например, zip, bz, xz, lzma и т д. Сначала выполняется архивация, затем сжатие, отдельными программами. Автоматический запуск некоторых утилит сжатия для только что созданного архива поддерживается в tar и других подобных программах с помощью специальных опций.
Также полезной возможностью архивации есть шифрование. Но теперь давайте рассмотрим какие существуют утилиты, с помощью которых выполняется архивирование файлов linux и как ими пользоваться.
Tar — это стандартная утилита, с помощью которой выполняется архивирование файлов Linux. Постепенно из небольшой программы архивации она превратилась в мощный инструмент, поддерживающий работу со многими вариантами архивов и алгоритмами сжатия. Программа поддерживает большое количество параметров. Давайте рассмотрим ее синтаксис и основные параметры:
$ tar опции f файл_для_записи /папка_файлами_для_архива
А теперь разберем основные опции:
- A — добавить файл к архиву
- c — создать архив в linux
- d — сравнить файлы архива и распакованные файлы в файловой системе
- j — сжать архив с помощью Bzip
- z — сжать архив с помощью Gzip
- r — добавить файлы в конец архива
- t — показать содержимое архива
- u — обновить архив относительно файловой системы
- x — извлечь файлы из архива
- v — показать подробную информацию о процессе работы
- f — файл для записи архива
- -C — распаковать в указанную папку
- —strip-components — отбросить n вложенных папок
Теперь давайте рассмотрим архивирование файлов в Linux. Чтобы создать архив используйте такую команду:
tar -cvf archive.tar.gz /path/to/files
А чтобы распаковать архив tar linux:
tar -xvf archive.tar.gz
Очень просто запомнить для упаковки используется опция c — Create, а для распаковки — x — eXtract.
Сжатый архив создается точно так же, только с опцией -z, это в случае, если использовалось шифрование gizp, если нужно bzip то применяется опция -j:
tar -zcvf archive.tar.gz /path/to/files
$ tar -zxvf archive.tar.gz
Например, рассмотрим как заархивировать папку в Linux:
tar -zcvf home.tar.gz
Хотя можно поступить по-другому, тот же архив мы получим если сначала создать обычный архив с помощью tar, а потом сжать его утилитой для сжатия, только здесь мы получаем больше контроля над процессом сжатия:
Также можно убрать сжатие:
Утилиты сжатия мы рассмотрим ниже.
Чтобы добавить файл в архив используйте:
tar -rvf archive.tar file.txt
Для извлечения одного файла синтаксис тот же:
tar -xvf archive.tar file.txt
Можно извлечь несколько файлов по шаблону соответствия с помощью параметра wildcard, например, извлечем все php файлы:
tar -xvf archive.tar —wildcards ‘*.php’
По умолчанию распаковать архив tar linux можно в текущую папку с именем архива, чтобы распаковать в нужную папку используйте ключ -C:
tar -xvf archive.tar -C /path/to/dir
Стандартную утилиту рассмотрели, теперь кратко рассмотрим ее альтернативы. Их не так много, и большинство из них уже устаревшие.
Shar позволяет создавать самораспаковывающиеся архивы. По сути, это скрипт оболочки, и для распаковки ему необходима оболочка Bash или другая совместимая с Bourne Shell. У Shar есть несколько преимуществ, но также он потенциально небезопасный, так как архив представляет собой исполняемый файл.
- -o — сохранять архив в файл вместо стандартного вывода
- -l — ограничить размер выходного файла
- -L — ограничить размер выходного файла и разбить его на части
- -n — имя архива не будет включено в заголовок
- -a — разрешить автоматическую генерацию заголовков
Примеры использования shar для того чтобы заархивировать папку linux:
Создаем shar архив:
shar file_name.extension > filename.shar
Распаковываем shar архив:
ar — утилита для создания и управления архивами. В основном используется для архивации статических библиотек, но может быть использована для создания любых архивов. Раньше использовалась довольно часто но была вытеснена утилитой tar. Сейчас используется только для создания и обновления файлов статических библиотек.
- — d — удалить модули из архива
- — m — перемещение членов в архиве
- — p — напечатать специфические члены архива
- — q — быстрое добавление
- — r — добавить члена к архиву
- — s — создать индекс архива
- — a — добавить новый файл к существующему архиву
Теперь рассмотрим примеры использования. Создадим статическую библиотеку libmath.a из объектных файлов substraction.o и division.o:
ar cr libmath.a substraction.o division.o
Теперь извлечем файлы из архива:
Таким образом, можно распаковать любую статическую библиотеку.
cpio — означает Copy in and out (скопировать ввод и вывод). Это еще один стандартный архиватор для Linux. Активно используется в менеджере пакетов Red Hat, а также для создания initramfs. Архивация в Linux для обычных файлов с помощью этой программы не применяется.
- -a — сбросить время обращения к файлам после их копирования
- -A — добавить файл
- -d — создать каталоги при необходимости
Пример использования. Создаем cpio архив:
file1.o file2.o file3.o
ls | cpio -ov > /path/to/output_folder/obj.cpio
Архивирование папки linux выполняется также само.
Сжатие архивов в Linux
Как создать архив в linux рассмотрели. Теперь давайте поговорим о сжатии. Как я говорил, для сжатия используются специальные утилиты. Рассмотрим кратко несколько из них
Чаще всего применяется Gzip. Это стандартная утилита сжатия в Unix/Linux. Для декомпрессии используется gunzip или gzip -d Сначала рассмотрим ее синтаксис:
$ gzip опции файл
$ gunzip опции файл
Теперь разберем опции:
- -c — выводить архив в стандартный вывод
- -d — распаковать
- -f — принудительно распаковывать или сжимать
- -l — показать информацию об архиве
- -r — рекурсивно перебирать каталоги
- -0 — минимальный уровень сжатия
- -9 — максимальный уровень сжатия
Примеры использования вы уже видели в описании утилиты tar. Например, выполним сжатие файла:
gzip -c файл > архив.gz
А теперь распакуем:
gunzip -c архив.gz
Но чтобы сжать папку в Linux вам придется сначала заархивировать ее с помощью tar, а уже потом сжать файл архива с помощью gzip.
bzip2 — еще одна альтернативная утилита сжатия для Linux. Она более эффективная чем gzip, но работает медленнее. Для распаковки используйте утилиту bunzip2.
Описывать опции bzip2 я не буду, они аналогичны gzip. Чтобы создать архив в Linux используйте:
В текущем каталоге будет создан файл file.bz2
Новый и высокоэффективный алгоритм сжатия. Синтаксис и опции тоже похожи на Gzip. Для распаковки используйте unlzma.
Еще один высокоэффективный алгоритм сжатия. Обратно совместимый с Lzma. Параметры вызова тоже похожи на Gzip.
Кроссплатформенная утилита для создания сжатых архивов формата zip. Совместимая с Windows реализациями этого алгоритма. Zip архивы очень часто используются для обмена файлами в интернете. С помощью этой утилиты можно сжимать как файлы, так и сжать папку linux.
$ zip опции файлы
$ unzip опции архив
- -d удалить файл из архива
- -r — рекурсивно обходить каталоги
- -0 — только архивировать, без сжатия
- -9 — наилучший степень сжатия
- -F — исправить zip файл
- -e — шифровать файлы
Чтобы создать Zip архив в Linux используйте:
zip -r /path/to/files/*
А для распаковки:
Как видите архивирование zip в Linux не сильно отличается от других форматов.
Выводы
Теперь вы знаете все что нужно об архивации файлов в Linux. Мы рассмотрели только консольные команды, так сказать, чтобы была понятна суть. В графическом интерфейсе все еще проще. Если остались вопросы — задавайте их в комментариях.
Источник