Ответ 1
С Bash и GNU tar:
file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file
Я хотел бы распаковать архив, например. "tar123.tar.gz" в каталог /myunzip/tar 123/", используя команду оболочки.
tar -xf tar123.tar.gz будет распаковывать файлы, но в том же каталоге, где я работаю.
Если имя файла будет "tar233.tar.gz", я хочу, чтобы он был распакован в /myunzip/tar 233.tar.gz ", поэтому каталог назначения будет основан на имени файла.
Кто-нибудь знает, может ли команда tar выполнить это?
С Bash и GNU tar:
file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file
tar -xzvf filename.tar.gz -C destination_directory
Вы можете изменить каталог перед извлечением с помощью флага -C
, но каталог уже должен существовать. (Если вы создаете каталоги, специфичные для файлов, я настоятельно рекомендую не вызывать их foo.tar.gz
- расширение подразумевает, что это файл архива, но он фактически является каталогом. Это приведет к путанице.)
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-бронзовым эпосом.
Отказ от ответственности: ни один из приведенных выше кодов не был протестирован.
Только что проверил "tar -xzf.tar.gz" (ubuntu: терминал, windows: git-bash) Создает новый каталог с именем файла - больше ничего не нужно