Создать целевой каталог при распаковке tarball

25

Можно ли создать целевой каталог, аналогичный тому mkdir -p, где я могу определить несуществующий целевой каталог в моей команде tar, и tar создаст этот каталог для меня?

Я знаю, что могу перенаправить вывод в каталог, используя tar -C /target/dir, но это не работает, если целевой каталог не существует.

wulfgarpro
источник
4
Если это невозможно, вы всегда можете создать псевдоним оболочки.
n0pe

Ответы:

38
mkdir -p /target/dir && tar -C /target/dir
V для V
источник
3
Нет кормления с ложечки, прямо и точно.
Амадо Мартинес
10
Незначительные изменения предложили:mkdir -p /target/dir && tar -C $_
Марк Мелвилл
@MarkMelville опишите нам, что $ _ должен был сделать здесь
Suhayb
@Suhayb $_- это специальный параметр в Bash, который расширяется до последнего аргумента предыдущей команды.
ConceptRat
13
tar -xvf bash.html_node.tar.gz --one-top-level

С man-страницы команды tar

--one-top-level[=DIR]

    Извлеките все файлы в DIR или, если используется без аргументов, в подкаталог с именем базового имени архива (за исключением стандартных суффиксов сжатия, распознаваемых по --auto-compress).

----- тест

тест 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// если имя tgz совпадает с root_dir архива, другого эффекта нет

тест 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// если имя tgz не совпадает с root_dir архива, создайте каталог верхнего уровня

Алаа Ахмад М. Закария
источник
3
Требуется GNU tar? Mac по умолчанию bsd tar не имеет этой опции.
Кертис Яллоп
1
Да, об этом следует упомянуть более четко.
Крисман
5

Это имело больше смысла для меня: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirделает папку, хотя я не совсем понимаю -pпереключатель. &&позволяет выполнить вторую команду. Я использовал типичные tar-переключатели, но в конце -Cиспользуется для смены каталогов и извлечения в нужное место.

ссылка: извлекать файлы, содержащиеся в архиве, tar-gz-to-new-directory-named-archive

Gr4cchus
источник
2
Ключ -p не выдаст ошибку, если каталог уже существует.
Дэвид
@David также создаст любые ведущие несуществующие каталоги, т.е. он создаст, /createесли он не существует.
Антонио Перес
1

Если вы не знаете пути для создания ...
Получите необходимые пути из файла tar, затем создайте их ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
ckroger
источник