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