用于一次解压缩多个文件的 Bash 脚本

用于一次解压缩多个文件的 Bash 脚本

我有一组文件:

lium3@l128-37:/DATA/fr94/01 $ ls -l
total 7784
-rw-r--r-- 1 lium3 mcm1 395575 May  2  1996 fr940104.0z
-rw-r--r-- 1 lium3 mcm1 113815 May  2  1996 fr940104.1z
-rw-r--r-- 1 lium3 mcm1 186333 May  2  1996 fr940104.2z
-rw-r--r-- 1 lium3 mcm1 164854 May  2  1996 fr940105.0z
-rw-r--r-- 1 lium3 mcm1  39677 May  2  1996 fr940105.1z
-rw-r--r-- 1 lium3 mcm1 284948 May  2  1996 fr940105.2z

我希望一次将它们全部解压(这只是一个示例!)。

我试过这个

find -name '*.0z' -exec sh -c 'uncompress  "${1%.*}" "$1"' _ {} \;

刚刚得到:

gzip: ./fr940125.gz: No such file or directory
gzip: ./fr940125.0z: unknown suffix -- ignored
gzip: ./fr940106.gz: No such file or directory
gzip: ./fr940106.0z: unknown suffix -- ignored

我有很多包含此类文件的目录。

如果我可以获得一个脚本来执行一个目录,是否可以通过目录递归地执行此操作?

答案1

看起来你有两个问题:

1:您的${1%.*}结果是文件的基本名称(例如fr940125),因此解压缩尝试添加默认后缀 .gz,对于它尝试的组合新文件名,不存在文件。

2:你给uncompress第二个参数,这是存档的正确文件名,但是uncompress不知道如何处理文件结尾。尝试将参数“ -S .0z”作为参数。

以下命令可能是正确的命令,用于递归提取当前目录和所有子目录中的所有 .0z 文件:

find -name '*.0z' -exec sh -c 'uncompress  -S .0z "$1"' _ {} \;

相关内容