当我使用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 ; 他无法在档案中找到这些文件,并导致错误消息。
你需要使用命令xargs循环来提取你的文件。
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输出总是有风险的)
总结以上是内存溢出为你收集整理的使用正则expression式时,Shell'tar:在归档中找不到'错误全部内容,希望文章能够帮你解决使用正则expression式时,Shell'tar:在归档中找不到'错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)