88

我有一个目录。它有大约 500K .gz 文件。

如何提取该目录中的所有 .gz 并删除 .gz 文件?

4

7 回答 7

172

这应该这样做:

gunzip *.gz
于 2013-11-20T17:55:25.500 回答
24

@techedemic 是正确的,但缺少“。” 提及当前目录,此命令将遍历所有子目录。

find . -name '*.gz' -exec gunzip '{}' \;
于 2015-03-17T09:56:07.387 回答
19

显然有不止一种方法可以做到这一点。

    # This will find files recursively (you can limit it by using some 'find' parameters. 
    # see the man pages
    # Final backslash required for exec example to work
    find . -name '*.gz' -exec gunzip '{}' \;

    # This will do it only in the current directory
    for a in *.gz; do gunzip $a; done

我敢肯定还有其他方法,但这可能是最简单的。

要删除它,只需rm -rf *.gz在适用的目录中执行

于 2013-04-16T13:28:53.747 回答
3

提取当前目录及其子目录中的所有 gz 文件:

 find . -name "*.gz" | xargs gunzip 
于 2015-01-06T13:35:28.690 回答
3

如果要提取单个文件,请使用:

枪压缩文件.gz

它将提取文件并删除 .gz 文件。

于 2016-07-15T08:55:59.127 回答
1
for foo in *.gz
do
  tar xf "$foo"
  rm "$foo"
done
于 2013-04-16T13:19:24.120 回答
0

尝试:

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 tar xvfz

然后尝试:

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 rm

这将解压当前目录中的所有 .tar.gz 文件,然后删除所有 .tar.gz 文件。如果你想解释,“|” 获取之前命令的标准输出,并将其用作之后命令的标准输入。使用不带引号的“man command ”来确定这些命令和参数的作用。或者,您可以在线研究。

于 2016-05-28T18:51:51.340 回答