Как распаковать архив без корневой папки, но сохранить в ней полную иерархию?

25

Если у меня есть .tarархив, и когда я его извлекаю, он дает мне одну папку, fooсодержащую еще кое-что, например:

foo/
  something.txt
  another.txt
  bar/
    something-else.txt

Есть ли способ, которым я могу изменить .tarкоманду, чтобы «пропустить» корневую папку ( fooв этом случае) и просто извлечь все содержимое этой папки прямо в мой cwd, как это:

something.txt
another.txt
bar/
  something-else.txt
Каллум
источник

Ответы:

29

Легко. Просто используйте --strip-components=1в архиве так:

tar -xf archive.tar --strip-components=1

И как объяснено на официальной tarстранице руководства :

--strip-компоненты = ЧИСЛО

вырезать NUMBER ведущих компонентов из имен файлов при извлечении

С логикой в ​​том, что, если путь состоит из, foo/something.txtто первый «компонент» этого пути будет таким foo/образом --strip-components=1эффективно отбрасывать foo/с пути foo/something.txt.

JakeGould
источник