распакуйте tar, но измените имя каталога, чтобы извлечь в


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Я хотел бы извлечь файл и имя , folder2 . Можно ли это сделать как однострочник?

Ответы:


35

Используйте -Cи --strip-components(см. man tar).

Пример:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Объяснение:

-CФлаг принимает каталог уже на месте , так что содержимое файла дегтя может быть разложена в него. следовательно mkdir FOLDER.

Этот --strip-componentsфлаг используется, когда файл tar естественным образом разворачивается в папку, скажем, в github, где он приводит примеры к repo-name-masterпапке. Конечно, вам не понадобится сгенерированная здесь папка первого уровня, поэтому --strip-componentsдля 1нее автоматически будет удалена эта первая папка. Чем больше значение, тем глубже вложенные папки удаляются.


Я читаю man tar. Не заметил --strip-components. хороший
Фелипе Альварес

1
tar-1.14 использует --strip-path, tar-1.14.90 + использует --strip-components. Может быть проблема здесь?
Михаил Москалев

Я бы приветствовал это, если бы он приводил пример, а не только переключатели, как говорится в онлайн-руководстве , три стиля аргументов приводят к путанице.
Иан

Забыл -f на tar -xz, мне кажется. Не удалось для меня. Я думал, что использовал это без причины все это время ...
Джон Каррелл

17

Вы также можете использовать эту --transformопцию для большей гибкости. Он принимает любые операции замены sed.

Например, вот как я извлекаю tarball Linux в новый каталог, чтобы я мог применить патч:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.