Linux下批量解压data目录.tgz文件至指定目录失败求助
解决批量解压tgz文件到指定目录的问题
正确解决方案
方法1:使用xargs的替换参数
通过-I {}指定文件名的替换位置,保证tar命令的参数顺序正确:
ls data/*.tgz | xargs -n1 -I {} tar zxvf {} -C /data/test/
方法2:使用for循环(更推荐)
直接遍历匹配的归档文件,避免ls输出可能带来的特殊字符问题:
for archive in data/*.tgz; do tar zxvf "$archive" -C /data/test/ done
错误原因分析
你原命令ls *.tgz | xargs -n1 tar zxvf -C /data/test/失效的核心是参数顺序错误:
xargs会将ls输出的每个文件名直接追加到命令末尾,实际执行的是:
tar zxvf -C /data/test/ folder_a.tgz
tar的-f选项要求紧跟归档文件路径,此时tar会把-C误认为是-f指定的归档文件名,自然找不到该文件,因此抛出-C cannot open: no such file or directory错误。
而你单独执行的两个命令参数顺序都正确:
tar zxvf folder_a.tgz -C /data/test/:-f后是正确的tgz文件,-C被识别为解压目录选项ls *.tgz | xargs -n1 tar zxvf:文件名被追加到tar zxvf后,执行tar zxvf folder_a.tgz,参数合法
内容的提问来源于stack exchange,提问作者FeddeHasQuestion
相关产品推荐
相关产品推荐

