Запаковать файл с tar.gz из корневого каталога

8

Я пытаюсь упаковать файл .csv с tar.gz, находясь в корневом каталоге.

Файл myfile.csvрасположен в /mnt/sdb1/ Итак, полное имя файла/mnt/sdb1/myfile.csv

Я пытаюсь сохранить tar.gz под /mnt/sdb1/old_files

Я попробовал это так:

tar -czf /mnt/sdb1/old_files/new.tar.gz mnt/sdb1/myfile.csv

Но когда я извлекаю файл, то будет извлечена папка с именем "mnt", которая содержит другую папку с именем "sdb1", которая содержит файл.

Можно ли сжать только файл, а не копировать все каталоги?

черный
источник

Ответы:

12

используйте --directoryопцию из man tar:

-C, - -директория DIR

перейти в каталог DIR

то есть:

tar -C /mnt/sdb1/ -czf /mnt/sdb1/old_files/new.tar.gz myfile.csv
Fiximan
источник
Спасибо Фиксиман! Это решило проблему. Я буду голосовать, как только у меня будет 15 репутации.
Черный,
3

Вы должны сначала cd /mnt/sdb1, а затем запустить tarкоманду.

К вашему сведению, вам не нужно использовать tarздесь, поскольку его цель - объединить несколько файлов в тарбол. Поскольку у вас есть только один файл, просто используйте gzip.

dr_
источник
Я знаю, но я должен сделать это из корневого каталога, потому что я выполняю команду из скрипта.
Черный,
1
Человек, так что просто добавьте cdкоманду раньше tar, затем вы можете вернуться или использовать, cd /mnt/sdb1 && tar -czf new.tar.gz myfile.csv && cd /если вы предпочитаете одну строку cmd.
McSinyx,
@McSinyx Проблема в том, что каталог не сохраняется, даже когда я выполню его, я снова окажусь cd /mnt/sdb1/в корневом каталоге при следующем выполнении команды. Но ваше второе решение выглядит логичным для меня, я пробую.
черный
@MCSinyx СЛАВНЫЙ! Это работает :) Спасибо, это будет ОЧЕНЬ полезно!
черный
@EdwardBlack Вы можете запустить скрипт из любого места, просто добавив соответствующие абсолютные пути. В общем, использование относительных путей - плохая идея, поскольку это может легко сломать вещи.
dr_20.07.15
1

Используйте -Cопцию tar:

   -C Directory
        Causes the tar command to perform a chdir subroutine to the
        directory specified by the Directory variable.
Джефф Шаллер
источник