Dragonfly BSD系统tar解压无实际文件输出问题求助
我之前在DragonFly BSD上也碰到过类似的tar解压异常情况,结合你的描述(verbose输出显示解压完成但ls找不到文件、原压缩包保留但无目标文件夹),可以从以下几个方向逐一排查:
先确认压缩包内的文件结构
别着急直接解压,先用tar tf <你的压缩包文件名>命令查看压缩包里面的内容。很多时候问题出在压缩包本身的路径设置——比如里面的文件可能带有绝对路径(比如/usr/local/xxx),或者嵌套了多层目录,你以为会解压到当前目录,实则被放到了其他位置。检查是否是隐藏文件/权限问题
普通的ls命令不会显示以.开头的隐藏文件,试试用ls -a查看当前目录。另外,如果解压的文件权限设置特殊,或者你没有读取权限,也会看不到。可以切换到root用户(执行su)再执行ls,或者用ls -la查看所有文件的权限细节。捕获tar的完整输出(包括错误信息)
有时候-v参数只显示了成功的条目,但可能有隐藏的错误没被看到。执行tar -xvf <你的压缩包文件名> 2>&1,把标准错误输出也重定向到屏幕,看看有没有报错(比如文件系统只读、磁盘空间不足、压缩包损坏等)。同时,执行完tar后立刻输入echo $?,如果返回值不是0,说明解压过程确实有错误。验证压缩包完整性与格式兼容性
DragonFly BSD默认的tar和GNU tar(Linux常用的)在某些扩展特性上有差异。先用file <你的压缩包文件名>确认压缩包的格式,比如是否是gzip、bzip2或者其他压缩格式。如果是用GNU tar创建的特殊包,试试安装gtar(GNU tar)后再解压,看看是否能正常生成文件。另外,也可以用gzip -t <压缩包>(如果是gz格式)或者对应压缩工具的校验命令,检查压缩包是否损坏。检查当前目录的挂载状态与磁盘空间
执行df -h看看当前分区是否已经满了,磁盘空间不足会导致tar显示解压成功但实际没写入文件。另外,用mount命令查看当前目录所在分区是否是只读挂载(比如挂载参数里有ro),只读模式下无法写入解压后的文件。
内容的提问来源于stack exchange,提问作者Jeferson Lemos

