我有一台机器,其中包含大量文件,这些文件最初是在 Mac 上创建的,名称中带有某种特殊字符(不确定是什么)。当我在 bash 终端中执行 ls 时,这些文件显示如下内容:
$ ls -al
ls: cannot access ._BLM?OAS: No such file or directory
ls: cannot access BLM?OAS: No such file or directory
total 20476
drwx------+ 43 Integr None 0 Sep 7 09:19 .
drwx------+ 16 Integr None 0 Sep 7 09:19 ..
-rwx------+ 1 Integr None 24580 Jul 6 14:27 .DS_Store
??????????? ? ? ? ? ? ._BLM?OAS
drwx------+ 2 Integr None 0 Sep 7 09:19 66-North
.
.
.
请特别注意 ls 后面的错误以及名称中带有 ? 的文件。现在我知道我可以安全地删除 ._ 文件,但当我尝试这样做时它不起作用:
$ rm ._*
rm: cannot remove `._BLM?OAS': No such file or directory
那么我该如何删除这些文件呢?它们有几百个,所以一个接一个地删除是行不通的。我知道我可以向 find 添加 -delete 标志来删除所有找到的文件,但执行“find . -name "._*" -delete”会导致相同的错误(仅重复数百次)。谢谢。
答案1
您可以通过将文件括在单引号中来删除它:
wmoore@bitbucket(/tmp)$ touch '._BLM?OAS'
wmoore@bitbucket(/tmp)$ ls -l ._BLM?OAS
-rw-r--r-- 1 wmoore users 0 Sep 7 14:04 ._BLM?OAS
wmoore@bitbucket(/tmp)$ rm -f '._BLM?OAS'
wmoore@bitbucket(/tmp)$ ls -l ._BLM?OAS
/usr/bin/ls: ._BLM?OAS: No such file or directory
但是,由于文件状态包含一堆问号,这让我相信您的文件系统已损坏。我建议使用fsck
,这可能会纠正数据。
答案2
这些文件是否位于 LVM 卷上?如果是,则看起来您可能丢失了卷组中的一个或多个物理或逻辑卷。这将导致ls -l
显示所有这些问号,因为ls
认为文件在那里(因为它在目录 inode 中列出),但它无法stat
从中获取权限、大小、所有权等,因为 inode 实际上不存在。
我以前也遇到过这种情况,但在我的案例中,LVM 被一个商业集群文件系统 (IBRIX) 使用,所以我使用的解决方案在某种程度上是针对该产品的。Novell 有一个页面描述了如何从 LVM 问题中恢复这里这可能会有所帮助。 CentOS 还有另一个这里。
但是,如果这只是一个常规的旧分区,上面有一个非集群文件系统(例如 /dev/sda5 上的 ext3 等),那么fsck
您可能只需要做一件简单的事情。
一定要检查日志和输出dmesg
。如果您确实丢失了物理或逻辑卷,您应该会看到来自 LVM 或底层硬件设备的错误。这将为您提供一些实际发生情况的提示,您需要知道这些信息才能修复它。