我是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