unzip 脚本 unix

unzip 脚本 unix

我是 Unix 的新用户,正在尝试在 Bash 中执行一个简单的脚本,该脚本将解压缩我列出的位置中的几个文件。我不明白为什么它一直崩溃。我在下面插入了脚本。我希望稍后将旧的 .tar.7z 压缩文件移动到另一个目录(因此我在下面的脚本中创建了新目录),但我只是想先让主要部分工作起来。

#!~/bash
# My program to try to unzip several files with ending of tar.7z
# I have inserted the ability to enter the directory where you want this to be done 

echo "What file location is required for unzipping?"

read dirloc

cd $dirloc
mkdir oldzippedfiles
for directory in $dirloc
        do
                if
                [ $directory=*.tar.7z ]
                then
                cat $directory | 7za x -an -txz -si -so | tar -xf -
        fi
        done

echo "unzipping of file is complete"

exit 0

答案1

您的脚本中有很多错误:

  1. #!~/bash不起作用,因为 bash 会扩展~到您的主目录。您必须指定 bash 的完整路径(通常是/bin/bash)。

  2. for directory in $dirloc由于两个原因而无法工作:

    • 要查看里面的文件$dirloc,您需要$dirloc/*

    • 您已经更改了目录,因此它必须是简单的*

    此外,由于您正在循环遍历文件,我建议重命名您的变量。

  3. test( [) 不支持全局匹配。

    改用for file in *.tar.7z

  4. 没有必要使用 cat。这会让事情变得更加困难,因为 7zip 无法猜测扩展中的存档格式。-txz将不起作用,除非您实际创建了一个带有扩展名.xz的文件.7z(不好的做法)。

    改用7za a -so $directory

  5. 我不确定这个-an开关应该做什么,但是它会引发错误而且我很确定它是没有必要的。

脚本的工作版本应如下所示:

#!/bin/bash

read dirloc

cd $dirloc

for file in *.tar.7z
        do
                7za x -so $file | tar -xf -
        done

相关内容