将文件夹中的所有.tgz文件解压缩到特定文件夹



我是linux的新手,正在尝试以下操作:

我有目录数据。在这个目录中有x个以*.tgz结尾的文件。我想解压缩每个文件,并将输出存储在一个新文件夹中。举个例子。我从开始

ls data
folder_a.tgz    folder_b.tgz    folder_c.tgz

我想以结束

ls /data/test/
folder_a    folder_b    folder_c

我尝试过以下几种:

ls *.tgz | xargs -n1 tar zxvf -C /data/test/

这给出了错误:

-C cannot open: no such file or directory

我不明白为什么这不起作用,因为这两种方法都如预期的那样起作用:

tar zxvf folder_a.tgz -C /data/test/
ls *.tgz | xargs -n1 tar zxvf

但将这些结合起来是行不通的。有人能帮助我实现目标吗?也许可以解释为什么我的解决方案不起作用?

您的问题是xargs将参数放在末尾,但tar要求文件名在f标志之后。以下内容应该有效:

ls *.tgz | xargs -n1 tar zxv -C /data/test/ -f

但也许仅仅使用循环将是更好的解决方案:

for ARCHIVE in *.tgz; do tar xvzf "$ARCHIVE" -C /data/test; done

或者:

ls *.tgz | while read ARCHIVE; do tar xvzf "$ARCHIVE" -C /data/test; done

最新更新