tar -tf filename.tar
folder1/file
folder1/name
[...]
Я хотел бы извлечь файл и имя для, folder2. Можно ли это сделать как однострочник?
tar -tf filename.tar
folder1/file
folder1/name
[...]
Я хотел бы извлечь файл и имя для, folder2. Можно ли это сделать как однострочник?
Используйте -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 предполагает, что каталог уже существует, поэтому содержимое файла tar может быть расширено до него. следовательно mkdir FOLDER .
Флаг --strip-components используется, когда файл tar естественным образом разворачивается в папку, скажем, в github, где он приводит примеры к папке repo-name-master . Конечно, вам не понадобится сгенерированная здесь папка первого уровня, поэтому --strip-components установленный в 1 , автоматически удалит эту первую папку для вас. Чем больше число, тем глубже вложенные папки удаляются.
Вы также можете использовать опцию --transform для большей гибкости. Он принимает любые операции замены sed.
Например, вот как я извлекаю tarball Linux в новый каталог, чтобы я мог применить патч:
tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'