Створіть цільовий каталог під час вилучення тарболу


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 $_- це спеціальний параметр у 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 архіву, створіть dir верхнього рівня


3
Потрібен смол GNU? Ця опція для bsd tar для Mac не має цієї опції.
Кертіс Яллоп

1
Так, це слід сказати чіткіше.
kcrisman

5

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

mkdirробить папку, хоча я не зовсім розумію -pкомутатор. &&дозволяє виконувати другу команду. Я використовував типові перемикачі смоли, але наприкінці -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.