розпакуйте 'tar', але змініть ім’я каталогу, яке потрібно витягнути


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

Я хотів би витягнути файл та ім'я до папки2 . Чи можна це зробити як однолінійний?

Відповіді:


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Прапор використовується , коли дьоготь файл, природно , розширити себе в папку, скажімо, як GitHub , де це приклади repo-name-masterпапки. Звичайно, вам не знадобиться створена тут папка першого рівня, створена так --strip-components, щоб 1автоматично видалити цю першу папку для вас. Чим більше число встановлюється, тим глибші вкладені папки видаляються.


Я читав man tar. Не помітив --strip-components. приємний
Феліпе Альварес

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

Я б схвалив це, якби він подав приклад, а не лише комутатори, як зазначено в онлайн-посібнику , 3 стилі аргументів викликають плутанину.
Iain

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

17

Ви також можете використовувати цю --transformопцію для трохи більшої гнучкості. Він приймає будь-які операції по заміні sed (-ів).

Наприклад, так я витягую тарбол 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.