You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下递归识别无扩展名及伪装为txt的gz文件并解压

识别并解压Linux下伪装成txt的gz压缩文件

1. 定位目标文件

使用find结合file命令,扫描指定目录下所有后缀为.txt但实际是gzip压缩格式的文件:

find /path/to/your/backup -type f -name "*.txt" -exec sh -c 'file "$1" | grep -q "gzip compressed"' _ {} \; -print

将/path/to/your/backup替换为你的实际备份目录路径,执行后会输出所有符合条件的文件列表,方便提前确认。

2. 批量解压文件

确认目标文件无误后,执行以下命令批量解压(-k参数保留原伪装文件,避免误删):

find /path/to/your/backup -type f -name "*.txt" -exec sh -c 'file "$1" | grep -q "gzip compressed"' _ {} \; -exec gunzip -k {} \;

解压完成后,原伪装文件(如somefilename.txt)会保留,同时生成真实的文本文件(如somefilename),你可以手动将其重命名为somefilename.txt;或者用以下命令直接指定输出名,避免混淆:

find /path/to/your/backup -type f -name "*.txt" -exec sh -c '
  if file "$1" | grep -q "gzip compressed"; then
    gunzip -c "$1" > "${1%.txt}.real.txt"
  fi
' _ {} \;

3. 处理双重压缩问题

如果存在多层压缩,可使用循环反复扫描解压,直到没有伪装的gz文件:

while true; do
  # 统计剩余的伪装文件数量
  count=$(find /path/to/your/backup -type f -name "*.txt" -exec sh -c 'file "$1" | grep -q "gzip compressed"' _ {} \; -print | wc -l)
  if [ $count -eq 0 ]; then
    break
  fi
  # 批量解压当前识别到的文件
  find /path/to/your/backup -type f -name "*.txt" -exec sh -c 'file "$1" | grep -q "gzip compressed"' _ {} \; -exec gunzip -k {} \;
done

注意事项

  • 若不需要保留原伪装文件,去掉命令中的-k参数即可
  • 建议先执行定位命令确认文件列表,再进行解压操作,避免误处理正常的txt文件

内容的提问来源于stack exchange,提问作者FrankyBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:43:21