本文目录导读:

删除文件开头的固定字节数
#!/bin/bash
# 删除文件开头指定字节数(删除前100字节)
HEADER_SIZE=100 # 要删除的字节数
# 批量处理当前目录下所有.txt文件
for file in *.txt; do
if [ -f "$file" ]; then
echo "处理文件: $file"
# 跳过前HEADER_SIZE字节,将剩余内容写入临时文件
tail -c +$((HEADER_SIZE+1)) "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已完成"
fi
done
删除文件开头的固定行数
#!/bin/bash
# 删除文件开头的指定行数(删除前10行)
LINE_COUNT=10 # 要删除的行数
# 批量处理当前目录下所有.py文件
for file in *.py; do
if [ -f "$file" ]; then
echo "处理文件: $file"
# 跳过前10行,将剩余内容写入临时文件
tail -n +$((LINE_COUNT+1)) "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已完成"
fi
done
删除到指定标记(如删除到 "BEGIN_DATA")
#!/bin/bash
# 删除文件开头直到包含指定标记的行
MARKER="BEGIN_DATA" # 删除到此标记之前的内容(包含标记行)
for file in *.dat; do
if [ -f "$file" ]; then
echo "处理文件: $file"
# 找到标记行的行号
LINE_NUM=$(grep -n "^$MARKER" "$file" | head -1 | cut -d: -f1)
if [ -n "$LINE_NUM" ]; then
# 从标记行开始保留
tail -n +$LINE_NUM "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已删除到第 $LINE_NUM 行(保留标记行)"
else
echo "✗ 未找到标记: $MARKER"
fi
fi
done
删除二进制文件的特定头部
#!/usr/bin/env python3
# 批量删除二进制文件头部信息
import os
import glob
# 配置
HEADER_SIZE = 1024 # 要删除的字节数
FILE_PATTERN = "*.bin" # 文件模式
# 批量处理文件
for filepath in glob.glob(FILE_PATTERN):
try:
with open(filepath, 'rb') as f:
content = f.read()
# 删除头部
new_content = content[HEADER_SIZE:]
# 写回文件
with open(filepath, 'wb') as f:
f.write(new_content)
print(f"✓ 已处理: {filepath}")
except Exception as e:
print(f"✗ 处理失败: {filepath} - {str(e)}")
交互式批量删除工具
#!/bin/bash
# 交互式批量删除文件头工具
show_menu() {
echo "===== 批量删除文件头工具 ====="
echo "1) 按字节数删除"
echo "2) 按行数删除"
echo "3) 删除到指定标记"
echo "4) 退出"
echo "=============================="
}
# 主程序
while true; do
show_menu
read -p "请选择操作: " CHOICE
case $CHOICE in
1)
read -p "请输入要删除的字节数: " BYTES
read -p "请输入文件类型(如 *.txt): " PATTERN
for file in $PATTERN; do
if [ -f "$file" ]; then
tail -c +$((BYTES+1)) "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已处理: $file"
fi
done
;;
2)
read -p "请输入要删除的行数: " LINES
read -p "请输入文件类型(如 *.txt): " PATTERN
for file in $PATTERN; do
if [ -f "$file" ]; then
tail -n +$((LINES+1)) "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已处理: $file"
fi
done
;;
3)
read -p "请输入标记字符: " MARK
read -p "请输入文件类型(如 *.txt): " PATTERN
for file in $PATTERN; do
if [ -f "$file" ]; then
LINE_NUM=$(grep -n "$MARK" "$file" | head -1 | cut -d: -f1)
if [ -n "$LINE_NUM" ]; then
tail -n +$LINE_NUM "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已处理: $file"
fi
fi
done
;;
4)
echo "再见!"
exit 0
;;
*)
echo "无效选择"
;;
esac
echo ""
done
带备份功能的删除脚本
#!/bin/bash
# 带备份功能的批量删除文件头
BACKUP_DIR="backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
HEADER_SIZE=100 # 要删除的字节数
for file in *.txt; do
if [ -f "$file" ]; then
# 备份原文件
cp "$file" "$BACKUP_DIR/$file.bak"
# 删除头部
tail -c +$((HEADER_SIZE+1)) "$file" > "$file.tmp"
mv "$file.tmp" "$file"
echo "✓ 已处理: $file (备份在 $BACKUP_DIR)"
fi
done
echo "处理完成!备份目录: $BACKUP_DIR"
使用方法
- 选择适合的脚本:根据需求选择对应功能的脚本
- 修改配置:调整脚本中的参数(字节数、行数、文件类型等)
- 测试运行:建议先在test目录测试
- 正式使用:确认无误后在目标目录运行
注意事项
- ⚠️ 备份原文件:操作前务必备份重要数据
- ⚠️ 先在样本测试:建议先在少量文件上测试
- ⚠️ 确认编码:处理文本文件时注意编码格式
- ⚠️ 权限问题:确保对文件有读写权限
需要更具体的功能或对某个脚本进行修改,请告诉我!