如何在bash中删除tar.gz压缩包内的空.yang文件
解决方案
你原脚本的问题在于仅解压了gzip层得到tar文件,没有将tar包内的实际文件提取到文件系统,所以find命令只会扫描当前工作目录的文件,无法触及压缩包内的.yang文件,自然不会生效。
可行实现脚本
#!/bin/bash for f in *.tar.gz; do echo "Processing file $f" # 生成随机临时目录,避免文件名冲突 tmp_dir=$(mktemp -d) # 完整解压tar.gz到临时目录 tar -xzf "$f" -C "$tmp_dir" # 仅删除空的.yang格式文件,不会误删其他类型文件 find "$tmp_dir" -type f -name "*.yang" -size 0 -print -delete # 重新打包为tar.gz覆盖原文件,保留原目录结构 tar -czf "$f" -C "$tmp_dir" . # 清理临时目录 rm -rf "$tmp_dir" echo "******************************************" done
注意事项
执行脚本前请先备份原始tar.gz文件,避免操作失误导致数据丢失
如果需要保留压缩包内文件的权限、软链接等属性,可在tar解压和打包命令中添加-p参数
脚本逻辑默认保留原压缩包内的文件路径结构,不会修改非空文件的内容和存储路径
内容的提问来源于stack exchange,提问作者least Risk
相关产品推荐
相关产品推荐

