我知道可能会有很多重复项。我已经经历了几乎所有这些(如 lsof、fuser 等),但无法解决。
rm:无法删除“temp_p/sys”:设备或资源繁忙
这是我在尝试从 bash 脚本中删除文件夹时收到的错误。我使用的命令是:
test -f "$TEMP_DIR" && sudo rm -rf "$TEMP_DIR"
我尝试从 shell 执行 rm -rf,它显示相同的输出。 lsof 的输出是:
lsof +D <directory name>
lsof: 警告: 无法 stat() fusion.gvfsd-fuse 文件系统 /run/user/76585/gvfs 输出信息可能不完整。 lsof: 警告: 无法 stat() vfat 文件系统 /media/kostef1/9016-4EF8 输出信息可能不完整。
Fuser 也没有显示任何内容。如果我列出所有隐藏文件,它仍然不会显示任何以点开头的内容。
答案1
它表明temp_p/sys
上面安装了一个文件系统,您需要先卸载它:
umount -- "$TEMP_DIR/sys"
rm -rf -- "$TEMP_DIR"
或者:
if mountpoint -q -- "$TEMP_DIR/sys"; then
umount -- "$TEMP_DIR/sys" || exit
fi
rm -rf -- "$TEMP_DIR"
首先检查是否是挂载点,如果无法卸载则中止。
顺便说一句,您rm -rf
将清理安装在那里的文件系统的内容,这是上面所避免的。
要清空$TEMP_DIR
,将文件保留在单独的文件系统上,您可以使用find
:
find "$TEMP_DIR" -xdev -depth -delete
(-delete
暗示-depth
,但仍然将其作为提醒包含在内是一个很好的做法)。
另请注意test -f "$TEMP_DIR"
是测试是否$TEMP_DIR
是一个常规的文件(符号链接解析后),对于任何其他类型的文件(包括目录),它将返回 false。也许你的意思是test -d
相反。另请注意-f
,rm
如果要求删除已经消失的文件,则不会抱怨,因此可以在可能不存在的文件上调用它。