Назад | Перейти на главную страницу

извлечение файлов из tar

tar -xvf company_raw_2012-03-16.tgz --directory=/root/test --strip-components=4

Я использую следующую опцию tar для удаления ведущих каталогов, и она работает должным образом.

--strip-components NUMBER
strip NUMBER of leading components from file names before extraction

Это работает только тогда, когда я знаю, что будет 4 подкаталога. У меня есть tar-файлы, и я не знаю, будут ли внутри их 2, 3 или 4 папки. Как удалить весь путь и извлечь файлы по указанному пути "каталога".

Вы можете просто извлечь tar-файл как обычно, не добавляя переключатель --strip-components. Затем вы можете использовать следующую команду find, чтобы переместить все извлеченные файлы в какой-либо целевой каталог:

$ find <your_extracted_dir> -type f -exec mv -t /path/to/dest/dir {} \;

У вас есть два варианта: сначала прочитать tar-файл (tar tf) и подсчитать / в выводе, затем извлечь; или сначала извлеките, затем верните все файлы вверх и удалите пустые каталоги.

Вот один из способов достижения первого подхода:

tar tf archive.tgz | tail -n1 | perl -ne '@l=split(/\//);print "$#l\n"'

Остальные методы оставим читателю в качестве упражнения :)

tar --transform 's#.*/\([^/]*\)$#\1#' -xvf <filename>

это будет использовать регулярное выражение в имени файла и удалить весь путь из имени файла, чтобы все файлы были извлечены в текущий каталог.

Перед выпуском извлечения с помощью --strip-components используя:

tar -tzf filename.tar.gz | less