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


25

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

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


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

Ответы:


38
mkdir -p /target/dir && tar -C /target/dir

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.