如何在Linux终端的子文件夹中解压缩不同的压缩格式



我在这个线程中看到了以下代码,将子文件夹中的所有.zip格式解压缩到相应的子文件夹中。关于这段代码,我的问题如下。

(1) 这是一个批处理作业的bash脚本吗?。如果可以的话,我可以用sudo bashfilename.bat.运行它吗

(2) 如何在代码中指定父文件夹目录。父目录包含在所有子文件夹下,子文件夹又包含压缩(压缩)文件。

(3) 如何修改代码以包括其他压缩格式,如.rar.7z

for file in *.zip; do
dir=$(basename "$file" .zip) # remove the .zip from the filename
mkdir "$dir"
cd "$dir" && unzip ../"$file" && rm ../"$file" # unzip and remove file if successful
cd ..
done
  1. 是的,该代码片段看起来像bash脚本。如果它被命名为filename.bat,您应该能够使用sudo bash filename.bat来运行它

  2. 代码假定当前目录是"父文件夹",其中包含所有压缩文件。您需要修改代码来处理包含.zip文件的子目录。有很多方法可以做到这一点。

  3. 考虑到需要处理除.zip文件之外的其他格式,您可能会修改代码,将其作为参数的文件名用作要解压缩的文件。

此代码可能工作:

for file in "$@"
do
dir=$(dirname "$file")
extn=${base##*.}
base=$(basename "$file" .$extn)
mkdir -p "$dir/$base"
(
cd "$dir/$base"
case $extn in
zip)   unzip "../$base.$extn";;
esac
)
done

现在,理论上,您可以扩展case语句中的扩展名列表,以包括其他文件格式。但是,您应该注意,并非所有压缩器都会打包多个文件。通常,您有一个复合格式,如.tar.gz.tar.xz.tar.bz2。相应的压缩器(或解压缩器)只需解压缩文件(丢失压缩后缀),而不从内部的.tar文件中提取数据。但是,如果rar7z的行为与zip类似,则可以使用:

case $extn in
(zip)   unzip "../$base.$extn";;
(rar)   unrar "../$base.$extn";;  # Or whatever the command is
(7z)    un7z  "../$base.$extn";;  # Or whatever the command is
(*)     echo "$0: unrecognized extension $extn on $file" >&2;;
esac

如果你觉得合适的话,你也可以恢复代码来删除文件的压缩形式。

相关内容

  • 没有找到相关文章

最新更新