mrd 命令是mtools工具集的一部分,用于删除MS-DOS文件系统中的目录。它类似于Linux系统中的rmdir命令,但专门用于MS-DOS格式的存储设备。默认情况下,mrd只能删除空目录,但使用-D选项可以递归删除非空目录。
a:\directory),rmdir使用Linux路径格式-D选项删除非空目录,rmdir不能删除非空目录mrd [选项] MS-DOS目录路径 [MS-DOS目录路径2 ...]
可以同时删除多个目录,目录路径使用MS-DOS格式。如果不指定驱动器,将使用默认驱动器。
| 选项 | 说明 |
|---|---|
-D |
递归删除目录及其所有内容(类似mdeltree) |
-v 或 --verbose |
详细模式,显示删除的目录信息 |
-n |
不保存更改,仅显示将要执行的操作 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
# 在Debian/Ubuntu系统中安装
sudo apt-get install mtools
# 在CentOS/RHEL系统中安装
sudo yum install mtools
# 在Fedora系统中安装
sudo dnf install mtools
# 在Arch Linux中安装
sudo pacman -S mtools
# 验证安装
mrd --version
# 删除A:驱动器上的空目录"temp"
mrd a:\temp
# 删除C:驱动器上的空目录
mrd c:\old_data
# 删除多个空目录
mrd a:\dir1 a:\dir2 a:\dir3
默认情况下,mrd只能删除空目录。如果目录不为空,命令会失败。
# 递归删除A:驱动器上的目录及其所有内容
mrd -D a:\temp
# 递归删除多个目录
mrd -D a:\temp1 a:\temp2 a:\temp3
# 递归删除并显示详细信息
mrd -Dv a:\old_backup
详细模式输出示例:
删除文件: a:\old_backup\file1.txt
删除文件: a:\old_backup\file2.doc
删除目录: a:\old_backup\subdir
删除目录: a:\old_backup
# 首先设置当前MS-DOS工作目录
mcd a:\
# 删除当前驱动器上的目录(相对路径)
mrd temp
# 递归删除当前目录下的子目录
mrd -D old_data
# 显示将要删除的内容,但不实际执行
mrd -n a:\temp
# 输出: 将要删除目录: a:\temp
# 测试递归删除
mrd -Dn a:\old_data
# 输出将要删除的文件和目录列表
测试模式对于确认删除操作非常有用,可以避免误删重要数据。
# 检查软盘上的目录
mdir a:\
# 删除所有临时目录
mrd a:\tmp
mrd a:\temp
mrd a:\cache
# 或者使用递归删除确保清理
mrd -D a:\tmp a:\temp a:\cache
#!/bin/bash
# cleanup_old_backups.sh - 定期清理旧的备份目录
DRIVE="a:"
RETENTION_DAYS=30
# 获取当前日期
CURRENT_DATE=$(date +%s)
echo "正在清理驱动器 $DRIVE 上的旧备份目录..."
# 遍历所有备份目录(假设命名格式为 backup_YYYYMMDD)
for dir in $(mdir "$DRIVE\\backup_*" 2>/dev/null | awk '{print $1}'); do
# 提取日期部分
if [[ "$dir" =~ backup_([0-9]{8}) ]]; then
BACKUP_DATE=${BASH_REMATCH[1]}
BACKUP_TIMESTAMP=$(date -d "$BACKUP_DATE" +%s 2>/dev/null)
if [ $? -eq 0 ]; then
# 计算天数差
DAYS_DIFF=$(( (CURRENT_DATE - BACKUP_TIMESTAMP) / 86400 ))
if [ $DAYS_DIFF -gt $RETENTION_DAYS ]; then
echo "删除过期备份: $dir (${DAYS_DIFF}天前)"
mrd -D "$DRIVE\\$dir"
fi
fi
fi
done
echo "清理完成"
#!/bin/bash
# safe_delete_directory.sh - 安全删除目录的脚本
DOS_PATH=$1
CONFIRM="no"
# 检查参数
if [ -z "$DOS_PATH" ]; then
echo "用法: $0 MS-DOS目录路径"
echo "示例: $0 a:\\temp"
exit 1
fi
# 检查目录是否存在
if ! mdir "$DOS_PATH" 2>/dev/null; then
echo "错误: 目录 '$DOS_PATH' 不存在"
exit 1
fi
# 显示目录内容
echo "目录 '$DOS_PATH' 包含以下内容:"
mdir "$DOS_PATH"
# 确认删除
read -p "确定要删除目录 '$DOS_PATH' 及其所有内容吗?(yes/no): " CONFIRM
if [ "$CONFIRM" = "yes" ]; then
echo "正在删除..."
mrd -Dv "$DOS_PATH"
if [ $? -eq 0 ]; then
echo "目录删除成功"
else
echo "目录删除失败"
exit 1
fi
else
echo "操作已取消"
fi
# 尝试删除非空目录(不使用-D选项)
mrd a:\non_empty_dir
# 错误信息: Directory not empty
# 解决方法1:使用-D选项
mrd -D a:\non_empty_dir
# 解决方法2:先手动清空目录内容
mdel a:\non_empty_dir\*.* # 删除所有文件
# 然后再删除目录
mrd a:\non_empty_dir
# 解决方法3:使用mdeltree命令(如果可用)
mdeltree a:\non_empty_dir
# 如果目录包含只读文件,删除可能失败
mrd -D a:\readonly_dir
# 可能失败,提示权限问题
# 解决方法:先修改文件属性
# 使用mattrib命令移除只读属性
mattrib -r a:\readonly_dir\*.*
# 然后再删除
mrd -D a:\readonly_dir
-D选项会永久删除目录及其所有内容,无法恢复-n选项测试,避免误删mrd -D的功能与mdeltree命令相同,后者可能已弃用使用mrd -D命令会永久删除数据且无法撤销。在以下情况下需特别谨慎:
mrd -D)在现代Linux系统中,更常见的做法是挂载MS-DOS文件系统后使用标准的Linux命令:
# 挂载软盘或U盘
sudo mount -t vfat /dev/sdb1 /mnt/dos
# 使用rmdir命令删除空目录
rmdir /mnt/dos/empty_dir
# 使用rm命令递归删除目录
rm -rf /mnt/dos/old_data
# 卸载
sudo umount /mnt/dos
优点:可以使用Linux命令的所有丰富选项,支持更多文件属性和权限控制。
# 1. 命令未找到错误
# 检查是否安装了mtools
which mtools
# 如果未安装,请安装mtools
sudo apt install mtools
# 2. "无法初始化驱动器"错误
# 检查设备是否存在且可访问
ls -l /dev/fd0
# 确保软盘已插入或设备已连接
# 3. "权限被拒绝"错误
# 使用sudo或以正确用户身份运行
sudo mrd a:\temp
# 4. "目录不为空"错误
# 使用-D选项递归删除
mrd -D a:\non_empty_dir
# 5. "目录不存在"错误
# 检查目录是否存在
mdir a:\ | grep 目录名
# 确认正确的目录路径
# 6. 只读文件无法删除
# 先修改文件属性
mattrib -r a:\dir\*.*
# 然后再删除目录
# 7. 磁盘写保护
# 检查磁盘是否写保护(软盘的写保护开关)
# 解除写保护后重试
# 8. 磁盘空间问题
# 删除操作不需要额外空间,但某些错误可能与磁盘状态有关
# 尝试使用mformat检查磁盘
# 1. 使用测试模式预览删除操作
mrd -Dn a:\old_data
# 2. 先列出目录内容确认
mdir a:\old_data
# 确认无误后再删除
mrd -D a:\old_data
# 3. 在脚本中添加确认步骤
read -p "确定要删除目录吗?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
mrd -D a:\old_data
fi
# 4. 使用日志记录删除操作
echo "$(date): 删除目录 a:\old_data" >> /var/log/deletion.log
mrd -D a:\old_data 2>&1 >> /var/log/deletion.log
mrd命令是mtools工具集的一部分,最初是为了在Unix系统上访问MS-DOS软盘而开发的。在早期,直接挂载DOS文件系统可能会遇到兼容性问题,mtools提供了无需挂载的直接访问方式。
现代适用场景:
-n选项预览操作-v选项记录删除过程