Сжатие папки (tar) без ее содержащей директории в имени папки

21

Я пытаюсь сжать папку с помощью tarкоманды.

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

Исходный путь:

/data/file/

Путь назначения:

/data/repo/temp/file.tar.gz

tar zcvf $srcpath $destinationpath

Я выполняю команду из другой папки, и при извлечении папки я получаю все подкаталоги вместо одной папки с файлами.

Сита Раман
источник
1
Синтаксис tar: tar zcvf file.tar.gz /path/dir/to/compressвозможно, вам следует изменить свою команду, tar zcvf $destinationpath $srcpathно мне непонятно, что вам нужно. Не могли бы вы уточнить свой вопрос на примере того, что вы ожидаете от команды tar?
Лети
спасибо за комментарий, моя проблема заключается в следующем после комментария, который вы поделились здесь "tar zcvf file.tar.gz / path / dir / to / compres", это должно работать нормально, если мы находимся в одном каталоге "file", мой случай мы работаем из другого каталога, например: / home / testuser1 / file: file - это папка, которую я хочу сжать, и я исключаю команду из root, а не home, поэтому нам может понадобиться указать полный путь к папке, извлекая я получаю все подкаталоги из / home / testuser1 / file вместо папки с файлами
Seetha Raman
Возможно, это опечатка, но в вашем примере вы перепутали источник и место назначения.
Джейкоб Влейм

Ответы:

50

Самый простой способ сделать это - сначала перейти в каталог:

cd /path/to/containing/folder && tar -zcvf tarfile.tar.gz foldername_tocompress

Таким образом, каталог (содержащий) папки становится корневым каталогом вашего сжатого файла.

Немного более продвинутый использует опцию -C:

tar -zcvf tarfile.tar.gz -C /path/to/foldername_tocompress .

Это создает tar.gzфайл в текущем (рабочем) каталоге, содержащий все файлы / папки внутри foldername_tocompress(обратите внимание на точку, говоря, что все файлы / папки должны быть включены).

Якоб Влейм
источник
4
Точка в конце вашей второй команды будет включать все файлы в текущем каталоге ...
Дэвид Дункан