Разархивируйте filename.tr.gz в каталог "filename" - PullRequest
32 голосов
/ 01 июня 2010

Я хотел бы распаковать архив, например. "tar123.tar.gz" в каталог / myunzip / tar123 / "с помощью команды оболочки.

tar -xf tar123.tar.gz распакует файлы, но в том же каталоге, где я работаю.

Если имя файла будет «tar233.tar.gz», я хочу, чтобы оно распаковывалось в /myunzip/tar233.tar.gz », поэтому каталог назначения будет основан на имени файла.

Кто-нибудь знает, может ли команда tar сделать это?

Ответы [ 4 ]

34 голосов
/ 01 июня 2010
tar -xzvf filename.tar.gz -C destination_directory
33 голосов
/ 01 июня 2010

С Bash и GNU tar:

file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file
4 голосов
/ 01 июня 2010

Вы можете изменить каталог перед извлечением с флагом -C, но каталог уже должен существовать. (Если вы создаете специфичные для файла каталоги, я настоятельно рекомендую не называть их foo.tar.gz - расширение подразумевает, что это архивный файл, но на самом деле это каталог. Это приведет к путанице.)

2 голосов
/ 01 июня 2010

Попробуйте

file=tar123.tar.gz
dir=/myunzip/$(basename $file .tar.gz)   # matter of taste and custom here
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; }
mkdir "$dir" && ( gzip -d "$file | ( cd "$dir" && tar xf - ) )

Если вы используете GNU tar, вы также можете задать ему параметр -C "$dir", который приведет к его переходу в каталог перед распаковкой. Но приведенный выше код должен работать даже с tar бронзового века.

Отказ от ответственности: ни один из приведенных выше кодов не был протестирован.

...