当我使用tar -xzf *.gz来提取当前目录中的所有.gz文件时,我Not found in archive错误中Not found in archive .gz文件。 但是,如果我逐一提取或使用for循环,它工作正常
for file in `ls *.gz`; do tar -xzf $file; done
这个错误的原因是什么?
用C / C ++(GCC / G ++)在Linux下的套接字编程中发送和接收文件
这个基本的shell脚本导出的东西有什么问题
没有find'gtk / gtk.h'文件即使使用pkg-config
JBoss 4.0.5启动需要15分钟才能部署一个war文件
如何在Linux中创buildAlt + Tab友好的全屏程序(如游戏)?
当你写:
tar -xf *.gz
tar命令可以看到(例如):
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
这被解释为从档案abc.tar.gz提取def.tar.gz和ghi.tar.gz的请求。 由于文件不在那里,您会收到警告消息。
换句话说, tar在一个tar文件(可能被压缩)上运行(在一次调用中)。 它不能在多个tar文件上运行。
请注意,如果abc.tar.gz包含文件pqr/xyz/important.c ,则可以通过指定只提取一个文件:
tar -xf abc.tar.gz pqr/xyz/important.c
你使用的符号只是这个符号的一个变种。
(是的,可以有tar的tar文件的原因,例如,Gmail不允许你发送一个tar文件或gzipped tar文件,其中包含一个可执行的文件,但是,如果你内嵌一个gzipped tar文件一个非压缩的tar文件,它不会查看内部文件来查找可执行文件,当我需要运行带有可执行configure脚本的tar文件时,我使用它)。
当你写
tar -xzf *.gz
你的shell将其扩展为字符串:
tar -xzf 1.gz 2.gz 3.gz
(假设1.gz,2.gz和3.gz在你当前的目录中)。
tar认为你想从1.gz提取2.gz和1.gz ; 他无法在档案中找到这些文件,并导致错误消息。
ls *.gz |xargs -n1 tar -xzf
这意味着:运行我tar -xzf当前目录中的每个gz文件。
主要原因是tar采用单个文件名参数。 当你调用tar *.tgz bash扩展*到tgz formant的所有文件名时,它变成tar file1 file2 file3 ,这是tar不能接受的。 所以要么你for i in *.tgz; do tar -zxvf $i ;done使用for循环for i in *.tgz; do tar -zxvf $i ;done for i in *.tgz; do tar -zxvf $i ;done或者使用一些其他执行tar命令,如注释中所示的副作用,是ls或find . -maxdepth 1 -name *tgz -exec tar -zxvf {} ; find . -maxdepth 1 -name *tgz -exec tar -zxvf {} ; ( ls输出总是有风险的)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。