Bash:检查存档根目录是否是文件夹或包含文件

Bash:检查存档根目录是否是文件夹或包含文件

尝试为所有档案提供通用的提取功能:但在提取之前我想检查:档案的根目录是文件夹还是文件。如果存档的根文件夹不包含文件,则按原样提取它。但是,如果 archice 的根目录是一个文件,或者它同时包含文件和文件夹,则创建与存档名称相同的新文件夹,然后将存档提取到该文件夹​​中

检查方法应适用于所有主要档案 *.tar.bz2 *.tar.gz *.bz2 *.rar *.gz *.tar *.tbz2 *.tgz *.zip *.Z *.7z * *.tar

对于我正在使用的基于 tar 的档案

ex() {
if [[ -z "$(tar -ztf "$1" | sed '/\//d')" ]]; then tar -zxvf "$1"; else tar -zxvf "$1" -C DIR; fi
}

答案1

我有一个unzzsh 脚本:

#! /bin/zsh -
tmp=$(TMPDIR=. mktemp -d -- ${${argv[-1]:t:r}%.tar}.XXXXXX) || exit
print -ru2 Extracting $argv[-1] in $tmp
cd -- $tmp || exit
[[ $argv[-1] = /* ]] || argv[-1]=../$argv[-1]
(PS4='Running '; set -x; "$@"); ret=$?
files=(*(NDY2))
case $#files in
  (0) print -u2 No file created
      rmdir -v "../$tmp";;
  (1) print -u2 Only one file/dir extracted at the top level.
      mv -v -- $files .. && rmdir -v ../$tmp;;
  (*) print -u2 More that one file/dir extracted at the top level.
      mv -vT ../$tmp ../$tmp:r;;
esac && exit $ret

用作:

unz tar xf file.tgz
unz unzip file.zip

ETC。

这个想法是将存档提取到一个临时目录中,只有在顶层提取多个文件时才会保留该临时目录。

(假设 GNU mv/ rmdir

相关内容