Чтобы извлечь конкретный каталог (и его содержимое, рекурсивно), просто передайте его в качестве дополнительного аргумента в командной строке. С помощью 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 !.*!!
Жиль "ТАК - перестань быть злым"
источник
wordpress
)? Мне это нужно, когда я извлекаю созданные GitHub тарболы, которые содержат ревизию git в разобранном компоненте, который я заранее не знаю.