我在这个线程中看到了以下代码,将子文件夹中的所有.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
-
是的,该代码片段看起来像
bash
脚本。如果它被命名为filename.bat
,您应该能够使用sudo bash filename.bat
来运行它 -
代码假定当前目录是"父文件夹",其中包含所有压缩文件。您需要修改代码来处理包含
.zip
文件的子目录。有很多方法可以做到这一点。 -
考虑到需要处理除
.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
文件中提取数据。但是,如果rar
和7z
的行为与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
如果你觉得合适的话,你也可以恢复代码来删除文件的压缩形式。