Как мне выполнить tar для каталога без сохранения структуры каталогов?


85

Я работаю над сценарием резервного копирования и хочу заархивировать каталог файлов:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files

Это разбивает его, но когда я распаковываю полученный файл, он включает в себя полную файловую структуру: файлы находятся в формате home/username/drupal/sites/default/files.

Есть ли способ исключить родительские каталоги, чтобы полученный tar знал только о последнем каталоге ( files)?

Ответы:


38
cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *

19
Вы также можете использовать опцию -C tar.
GuruM

9
cd не рекомендуется и подвержен ошибкам, например, большие скрипты или make-файлы. Приведенный ниже ответ является более удобным и правильным.
Грегор

Пытается -Cи --directoryне работает у меня на Ubuntu 16.04. Это единственный вариант, который работает.
haxpor

Это единственный работающий вариант -C добавить файл. корневая папка, чего мы не хотим.
Николя

169

Используйте параметр --directory:

 tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 

1
Что, если я хочу разместить здесь 2 каталога?
Шанпей Чжоу

@ user3352668 просто добавьте два каталога. Например, если по умолчанию содержатся «файлы» и «дополнительные файлы», просто добавьте «дополнительные файлы» в строку nbt. Кстати: Лучшее решение - nbt, должен быть принятый ответ
Аноним,

4
-C DIR совпадает с --directory = DIR , меняет каталог на DIR
Маркус

1
Просто подумал, что упомяну, что порядок здесь значительный. Вы не можете находиться в --directory="/home/username/drupal/sites/default files"непосредственной близости от места назначения ~/backup.tgz.
Крис Стричинский,

6
@ChrisStryczynski Обратите внимание, что путь, заданный --directoryпараметром, не указан "/home/username/drupal/sites/default files". Это /home/username/drupal/sites/default, с последующим позиционным аргументом , указывающим имя каталога быть заархивированы, files.
Глава

51

Привет, у меня есть лучшее решение, когда войти в указанный каталог невозможно (Makefiles и т. Д.)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .

Не забудьте точку (.) В конце !!


4
Что делает точка в конце?
Брюс Сан

3
@BruceSun -C изменяет ваш рабочий каталог. Точка указывает tar, какой каталог вы хотите заархивировать (т.е. текущий рабочий каталог).
user12345

2
Если вы опустите точку в конце, вы, скорее всего, получите предупреждение: tar: Трусливый отказ от создания пустого архива
user12345

3
Все говорят об опции -C или --directory, но без небольшого "." в конце, когда @MaikolD упомянул об этом, он не работает - по крайней мере, в моей среде.
aks

6
Это по- прежнему оставляет вас с .папкой в корне дегтя
electrovir

2

Для того, чтобы разархивировать все TXT (* .txt) файлы /home/myuser/workspace/zip_from/ к /home/myuser/workspace/zip_to/без структуры каталогов исходных файлов используйте следующую команду:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt

2

Создать tar-архив

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en

Un-tar файлы на локальном компьютере

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Загрузить на сервер

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"

Un-tar на сервере

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/


0

Для меня -C или --directory не работали, я использую это

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -

0

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

tar -C <directoryPath> -cvzf <Path of the tar.gz file> filename1 filename2... filename N

например:

tar -C /home/project/files -cvzf /home/project/files/test.tar.gz text1.txt text2.txt

-3
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C делает компакт-диск для вас


Так не пойдет. См. Решения MaikoID и Нила Баттерворта.
Винсент

3
-Cработает, но нужно использовать как-C <dir> file1 file2 ...
vyom
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.