Подтвердить что ты не робот

Untar filename.tr.gz в каталог "filename"

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

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

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

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

4b9b3361

Ответ 1

С Bash и GNU tar:

file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file

Ответ 2

tar -xzvf filename.tar.gz -C destination_directory

Ответ 3

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

Ответ 4

Try

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-бронзовым эпосом.

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

Ответ 5

Только что проверил "tar -xzf.tar.gz" (ubuntu: терминал, windows: git-bash) Создает новый каталог с именем файла - больше ничего не нужно