Як отримати певний каталог із тарболу? і зніміть провідний каталог?


12

Я хочу витягти конкретний каталог із тарболу wordpress. спеціально wp-includesдля .. Здається, що структура каталогу всередині тарболу є, wordpress/wp-includesале мені просто потрібно, ./wp-includesяк тільки вона буде вилучена, жодного провідного каталогу wordpress. Як би я це зробив?

Відповіді:


13

Щоб витягнути певний каталог (та його вміст, рекурсивно), просто передайте його як додатковий аргумент у командному рядку. За допомогою GNU tar ви можете позбавити провідного каталогу з --strip-componentsможливістю (і загалом трансформувати імена файлів за допомогою --transform). У системах, що не є Linux, ви можете використовувати pax (він є в POSIX, але деякі дистрибутиви Linux опускають його за умовчанням) та його -sпараметр.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Ви можете об'єднати список включень із правилами перезапису, додавши правило, щоб переписати все до порожнього імені (що означає "не витягувати"; правило застосовується лише у тому випадку, якщо попередні правила не відповідали).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Якщо припустити, що у вас є смола GNU, ви можете використовувати --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Я вважаю, що сучасні версії BSD tar також підтримують --strip-components. У гіршому випадку ви можете:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Я закінчив робити останнє лише тому, що поспішаю, але добре знати, що існує.
ксенотеррацид

Чи можна було б використовувати команду, яка не вимагає чіткого іменування знятого компонента (наприклад wordpress)? Мені це потрібно, коли я витягую створені GitHub тарболи, які містять ревізію git у зніманому компоненті, про який я не знаю заздалегідь.
tjanez
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.