Compress a folder with tar?
I’m trying to compress a folder ( /var/www/ ) to ~/www_backups/$time.tar where $time is the current date. This is what I have:
cd /var/www && sudo tar -czf ~/www_backups $time"
I am completely lost and I’ve been at this for hours now. Not sure if -czf is correct. I simply want to copy all of the content in /var/www into a $time.tar file, and I want to maintain the file permissions for all of the files. Can anyone help me out?
2 Answers 2
To tar and gzip a folder, the syntax is:
tar czf name_of_archive_file.tar.gz name_of_directory_to_tar
Adding — before the options ( czf ) is optional with tar . The effect of czf is as follows:
- c — create an archive file (as opposed to extract, which is x )
- f — filename of the archive file
- z — filter archive through gzip (remove this option to create a .tar file)
If you want to tar the current directory, use . to designate that.
To construct filenames dynamically, use the date utility (look at its man page for the available format options). For example:
cd /var/www && tar czf ~/www_backups/$(date +%Y%m%d-%H%M%S).tar.gz .
This will create a file named something like 20120902-185558.tar.gz .
On Linux, chances are your tar also supports BZip2 compression with the j rather than z option. And possibly others. Check the man page on your local system.
This is perfect, thank you. I have one tiny issue though. After creating a tar file of /var/www, it is placed within /var/www directories in the tar file. Here’s the code i’m using now sudo tar -czf ~/www_backups/$time.tar /var/www/» Imagine i have a file called test.txt inside /var/www. After making a tar copy of the file, when i extract it it will be placed inside /var/www directories. Does that make sense? I hope it does, kinda hard to explain. I will check for BZip2 support, thanks for the suggestion!
That’s why you first cd to the directory you want to package, then tar cf file.tar . — that last . instead of specifying the full path will make the paths inside the archive relative to the current directory. You could also use the -C option for tar (look at the man page).
@Qwertylicious -f (from man page) Read the archive from or write the archive to the specified file.The filename can be — for standard input or standard output.
Examples for Most Common Compression Algorithms
The question title for this is simply «Compress a folder with tar?» Since this title is very general, but the question and answer are much more specific, and due to the very large number of views this question has attracted, I felt it would be beneficial to add an up-to-date list of examples of both archiving/compressing and extracting/uncompressing, with various commonly used compression algorithms.
These have been tested with Ubuntu 18.04.4. They are very simple for general use, but could easily be integrated into the OP’s more specific question contents using the the techniques in the accepted answer and helpful comments above.
One thing to note for the more general audience is that tar will not add the necessary extensions (like .tar.gz ) automatically — the user has to explicitly add those, as seen in the commands below:
# 1: tar (create uncompressed archive) all files and directories in the current working directory recursively into an uncompressed tarball tar cvf filename.tar * # 2: Untar (extract uncompressed archive) all files and directories in an uncompressed tarball recursively into the current working directory tar xvf filename.tar # 3: tar (create gzipped archive) all files and directories in the current working directory recursively into a tarball compressed with gzip tar cvzf filename.tar.gz * # 4: Untar (extract gzipped archive) all files and directories in a tarball compressed with gzip recursively into the current working directory tar xvf filename.tar.gz # Note: same options as 2 above # 5: tar (create bzip2'ed archive) all files and directories in the current working directory recursively into a tarball compressed with bzip2 tar cvjf filename.tar.bz2 * # Note: little 'j' in options # 6: Untar (extract bzip2'ed archive) all files and directories in an tarball compressed with bzip2 recursively into the current working directory tar xvf filename.tar.bz2 # Note: same options as 2 and 4 above # 7: tar (create xz'ed archive) all files and directories in the current working directory recursively into a tarball compressed with xz tar cvJf filename.tar.xz * # Note: capital 'J' in options # 8: Untar (extract xz'ed archive) all files and directories in an tarball compressed with xz recursively into the current working directory tar xvf filename.tar.xz # Note: same options as 2, 4, and 6 above
See the tar man page (best to use man tar on your specific machine) for further details. Below I summarize the options used above directly from the man page:
-c, —create
create a new archive-x, —extract, —get
extract files from an archive-v, —verbose
verbosely list files processed-z, —gzip
filter the archive through gzip-j, —bzip2
filter the archive through bzip2-J, —xz
filter the archive through xz-f, —file=ARCHIVE
use archive file or device ARCHIVE
No need to add the — in front of the combined options, or the = sign between the f option and the filename.
I got all this from my recent article, which will be expanded further into a much more comprehensive article as I have time to work on it.
Команда tar: архивация, распаковка и сжатие файлов в Linux
По умолчанию в системах Unix/Linux включен встроенный архиватор tar, позволяющий запаковывать/распаковывать архив и выполнять много других операций с заархивированными файлами. В его функционал не входит компрессия, но он отлично работает с такими утилитами, как Gzip и BZip2 – с помощью них и выполняется сжатие файлов.
В сегодняшней статье мы подробно разберем основные функции команды tar, а также рассмотрим, как работать с архивами в Linux-системе.
Tar: основные функции и синтаксис
Начнем с синтаксиса – он довольно прост. Если вы когда-либо работали в консольном окне, то вопросов возникнуть не должно. Создание нового архива выполняется следующей строчкой кода:
Распаковка файлов тоже выполняется просто:
Основные опции:
- -A, —concatenate – позволяет добавить уже существующий архив к другому;
- -c, —create – создает новый архив и записывает в него файлы;
- -d – расшифровывается как -diff или -delete, где первая команда проверяет различия между архивами, вторая – удаляет данных из архива;
- -r, append – добавляет новые файлы в конец заархивированного документа;
- -t, —list – разрешает посмотреть содержимое архива, формат аналогичен ls –l; если файлы не указаны, то выводит информацию обо всех файлах;
- -u, —update – обновление файлов в созданном архиве с тем же наименованием;
- -x, —extract – распаковывает файлы из заархивированного документа.
Мы также можем использовать особые параметры, относящиеся к каждой опции:
- -c dir, —directory=DIR – перед тем как выполнить операцию, директория будет изменена на dir;
- -f file, —file – выводит результат в file;
- -p, —bzip2 – сохраняет все права доступа;
- -v – расшифровывается как -verbose или -totals: выводит всю информацию о текущем процессе и показывает сведения об уже завершенном процессе.
Как мы говорили ранее, tar также хорошо взаимодействует с утилитами сжатия. Для их использования предназначены отдельные опции:
- -a, -auto-compress – выбирает программу для сжатия данных;
- -I, -use-compress-program=PROG – позволяет фильтровать архив с помощью утилиты PROG, для которой требуется использование опции -d;
- -j, -bzip2 – сжимает архив с помощью программы bzip2;
- -J, -xz – сжимает архив с помощью программы XZ;
- -Izip – сжимает архив с помощью программы Lzip;
- -Izma – сжимает архив с помощью программы Izma;
- -z, -gzip, -gunzip, -ungzip – сжимает архив с помощью программы GZIP;
- -Z, -compress, -uncompress – использование компрессии.
У команды tar есть еще много возможностей – чтобы их посмотреть, достаточно в консольном окне ввести команду tar —help. О том, как воспользоваться наиболее важными опциями и поработать с архивацией данных, мы поговорим в следующем разделе.
Как воспользоваться архиватором tar
Для работы с архиватором будем использовать сборку Kali Linux. Данный алгоритм подойдет и для других версий Unix/Linux, поэтому можете просто следовать инструкциям, чтобы прийти к тому же результату.
Создать новый архив или распаковать уже созданный мы можем двумя путями: воспользоваться необходимыми командами через консоль либо использовать встроенный архиватор ручным способом. Давайте рассмотрим оба варианта и посмотрим, как с их помощью можно создать новый архив, посмотреть его содержимое, распаковать данные и провести их сжатие.
Архивируем файлы
Чтобы добавить один или несколько файлов в архив через консольное окно, нам потребуется сначала прописать пути, чтобы система понимала, откуда брать файлы. Сделать это довольно просто: указываем в консоли путь до директории, в которой находятся файлы. В нашем случае это /home/kali/.
Для архивации вводим команду типа:
В результате будет создан архив в исходной папке – перейдем в нее и убедимся, что все прошло корректно:
Второй способ – ручное архивирование. Для этого выбираем файл, который нужно заархивировать, и кликаем по нему правой кнопкой мыши. В отобразившемся меню нажимаем на функцию создания архива. Далее нам потребуется указать название файла, задать ему расширение .tar и воспользоваться кнопкой архивирования файлов.
Как видите, создать tar-архив в Linux совсем не сложно. Если вам нужно заархивировать несколько документов через консоль, то просто пропишите их имена с использованием пробела.
Распаковываем tar-файлы
В данном случае нам также потребуется в консольном окне перейти в нужную директорию. Как только пути будут прописаны, можно вводить команду для разархивации:
Таким образом будут получены файлы, находящиеся в архиве. Также мы можем их достать и ручным способом – для этого достаточно кликнуть правой кнопкой мыши по файлу и нажать на «Извлечь здесь».
Как работать со сжатием файлов
Напоминаю, что tar не сжимает файлы, а только добавляет их в архив. Для уменьшения размера архивируемых файлов потребуется дополнительно воспользоваться такими утилитами, как bzip2 и gzip. Они хорошо взаимодействуют с tar, поэтому в консольном окне достаточно прописать несколько новых значений. В ручном режиме сжатие файлов выполняется с помощью расширения .tar.bz2 или .tar.gz.
Итак, для сжатия в bzip2 переходим через консоль в нужную директорию и прописываем следующую команду:
Чтобы использовать gzip, другую утилиту для сжатия, вводим следующее:
Для распаковки файлов такого типа используйте:
Ручной способ аналогичен созданию обычного архива, только необходимо указать расширение .tar.bz2 либо .tar.gz.
Распаковать файлы самостоятельно тоже просто – для этого нужно кликнуть правой кнопкой по архиву и выбрать «Извлечь здесь».
Как посмотреть содержимое архива
Мы можем посмотреть, что находится в архиве без его распаковки. В консоли для этого необходимо ввести команду такого типа:
Обратите внимание, что под командой отобразилось название «document1» – это файл, находящийся в архиве. Если файлов несколько, то каждый будет прописан в новой строке.
Для просмотра архива без использования консоли достаточно кликнуть двойным щелчком мыши по архиву. После этого отобразится новое окно, в котором будет показан весь список файлов.
Заключение
Сегодня мы рассмотрели основные методы архивации, распаковки и сжатия файлов с помощью команды tar. Это простой инструмент, который отлично взаимодействует с утилитами сжатия bzip2 и gzip. Надеюсь, что теперь вам будет легко работать с архивами в системе Linux. Спасибо за внимание!