mread(MS-DOS read的缩写)命令主要用于:
mread是mtools工具集的一部分,需要先安装mtools:
# Ubuntu/Debian
sudo apt-get install mtools
# CentOS/RHEL
sudo yum install mtools
# macOS
brew install mtools
mread [选项] DOS文件 [Linux文件]
| 选项 | 说明 |
|---|---|
| -t | 将文本文件从DOS格式转换为Unix格式 |
| -m | 保留文件修改时间 |
| -n | 覆盖文件时不提示确认 |
| -o | 覆盖文件时提示确认(默认) |
| -v | 详细模式,显示操作过程 |
| -D | 调试模式,显示调试信息 |
| --help | 显示帮助信息 |
mtools使用配置文件定义DOS驱动器到Linux设备的映射:
# 查看或编辑mtools配置文件
cat ~/.mtoolsrc
# 或
cat /etc/mtools.conf
# 典型配置示例
drive a: file="/dev/fd0"
drive c: file="/dev/sda1"
drive d: file="/path/to/dos.img"
drive e: file="/dev/sdb1"
从DOS驱动器读取文件到当前目录:
mread a:config.sys
这将把A:驱动器中的config.sys文件复制到当前目录。
从DOS驱动器读取文件并指定输出文件名:
mread c:autoexec.bat autoexec.bak
使用 -t 选项转换DOS文本文件为Unix格式:
mread -t d:readme.txt readme.unix.txt
这会移除DOS回车符(CR),只保留换行符(LF)。
使用 -m 选项保留原始文件的修改时间:
mread -m c:document.doc old_document.doc
使用 -v 选项显示详细操作信息:
mread -v a:*.*
从DOS磁盘镜像文件中读取文件:
# 首先在mtools.conf中配置镜像文件
# drive i: file="/path/to/dos_disk.img"
# 然后从镜像读取文件
mread i:important.dat
使用通配符批量读取文件:
mread c:*.txt
将DOS文件读取到指定目录:
mread d:data.bin /home/user/data/
从旧的DOS系统恢复数据:
# 从DOS硬盘恢复文档文件
mread -t -m c:*.doc /recovered_docs/
mread -t -m c:*.xls /recovered_docs/
在Linux主机和DOS虚拟机之间交换文件:
# 配置虚拟机磁盘镜像
echo 'drive v: file="/vm/dos_c.vmdk"' >> ~/.mtoolsrc
# 从虚拟机磁盘读取文件
mread v:project\source\*.* /host_projects/
访问旧的DOS格式存储介质:
# 从软盘读取数据
mread -v a:*.* /archive/floppy_backup/
| 命令 | 功能 | 示例 |
|---|---|---|
mdir |
查看DOS目录内容 | mdir a: |
mcopy |
双向复制文件 | mcopy a:file.txt . |
mwrite |
向DOS系统写入文件 | mwrite file.txt a: |
mtype |
显示DOS文件内容 | mtype a:readme.txt |
mattrib |
修改DOS文件属性 | mattrib a:file.txt |
创建自动化脚本备份DOS驱动器中的重要文件:
#!/bin/bash
# backup_dos_data.sh - DOS数据备份脚本
BACKUP_DIR="/backup/dos_data"
DOS_DRIVE="c:"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "开始备份DOS数据: $(date)"
# 创建备份目录
mkdir -p "$BACKUP_DIR/$TIMESTAMP"
# 备份文档文件
echo "备份文档文件..."
mread -t -m "$DOS_DRIVE\*.doc" "$BACKUP_DIR/$TIMESTAMP/"
mread -t -m "$DOS_DRIVE\*.xls" "$BACKUP_DIR/$TIMESTAMP/"
mread -t -m "$DOS_DRIVE\*.txt" "$BACKUP_DIR/$TIMESTAMP/"
# 备份配置文件
echo "备份配置文件..."
mread -t -m "$DOS_DRIVE\*.ini" "$BACKUP_DIR/$TIMESTAMP/"
mread -t -m "$DOS_DRIVE\*.cfg" "$BACKUP_DIR/$TIMESTAMP/"
mread -t -m "$DOS_DRIVE\config.*" "$BACKUP_DIR/$TIMESTAMP/"
echo "备份完成: $(date)"
echo "备份位置: $BACKUP_DIR/$TIMESTAMP"
批量转换DOS文本文件为Unix格式:
#!/bin/bash
# convert_dos2unix.sh - DOS到Unix格式转换
DOS_DIR="$1"
UNIX_DIR="$2"
if [ -z "$DOS_DIR" ] || [ -z "$UNIX_DIR" ]; then
echo "用法: $0 DOS驱动器 Unix目录"
echo "示例: $0 d: /converted_files"
exit 1
fi
# 创建输出目录
mkdir -p "$UNIX_DIR"
echo "开始转换文件格式..."
mread -t -v "$DOS_DIR\*.txt" "$UNIX_DIR/"
mread -t -v "$DOS_DIR\*.bat" "$UNIX_DIR/"
mread -t -v "$DOS_DIR\*.ini" "$UNIX_DIR/"
echo "格式转换完成"
echo "转换后的文件保存在: $UNIX_DIR"
| 问题 | 解决方案 |
|---|---|
| "Cannot initialize 'A:'" 错误 | 检查mtools配置文件中驱动器的定义 |
| "File not found" 错误 | 确认文件路径和名称正确,DOS使用8.3文件名格式 |
| 权限被拒绝 | 检查对Linux输出目录的写权限 |
| 文本文件显示乱码 | 使用 -t 选项转换文件格式 |
| 文件名截断 | DOS文件名被截断为8.3格式,这是正常行为 |