删除多个含有特殊字符的文件

删除多个含有特殊字符的文件

我有一台机器,其中包含大量文件,这些文件最初是在 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 或底层硬件设备的错误。这将为您提供一些实际发生情况的提示,您需要知道这些信息才能修复它。

相关内容