Как мне выполнить 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
Sangram
источник
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

Это сработало для меня:

gzip -dc "<your_file>.tgz" | tar x -C <location>
Вишрант
источник
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