目录损坏,删除它们时出现问题

目录损坏,删除它们时出现问题

我的 Linux 系统中有一个目录,因为某些软件故障,创建了一些带有垃圾名称的目录,如下所示,我在删除它们时遇到问题,

$ ll
total 1532
drwxr-xr-x   2 sensage sensage   4096 Apr 19 16:56 -?$??
drwxrwxr-x 248 sensage sensage   4096 Apr 23 11:37 .
drwxrwxr-x  99 sensage sensage   4096 Apr 16 14:23 ..
drwxr-xr-x   2 sensage sensage   4096 Apr  6 14:54 }???;?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 03:01 }??=?|
-rw-r--r--   1 sensage sensage     88 Apr 22 13:37 $
drwxr-xr-x   2 sensage sensage   4096 Apr  2 12:43 ?
drwxr-xr-x   2 sensage sensage   4096 Mar 20 02:51 ?=??&?
drwxr-xr-x   2 sensage sensage   4096 Apr 11 08:40 ?;%??;
drwxr-xr-x   2 sensage sensage   4096 Apr 14 09:38 ?:????
drwxr-xr-x   2 sensage sensage   4096 Mar 22 17:21 ?(?>~?
drwxr-xr-x   2 sensage sensage   4096 Apr  1 13:45 ?[???%
drwxr-xr-x   2 sensage sensage   4096 Apr  3 14:03 ?@????
drwxr-xr-x   2 sensage sensage   4096 Apr 12 16:18 ??
drwxr-xr-x   2 sensage sensage   4096 Apr 17 16:38 ??&???
drwxr-xr-x   2 sensage sensage   4096 Mar 25 02:43 ??+???
drwxr-xr-x   2 sensage sensage   4096 Apr 19 00:46 Ü¡?,??
drwxr-xr-x   2 sensage sensage   4096 Mar 28 18:54 ÚŸ??"?
drwxr-xr-x   2 sensage sensage   4096 Mar 27 01:04 ???(?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 22:41 ??ͨ?`
drwxr-xr-x   2 sensage sensage   4096 Apr 15 11:44 ?????-

正如您可以看到蓝色的目录名称。当我想删除它们时,出现以下错误:

$ ls -1  | grep -v 20 | xargs rm -rf 
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
rm: invalid option -- ¼
Try `rm ./'-¼$Þ¸Í'' to remove the file `-\274$\336\270\315'.
Try `rm --help' for more information.

我该怎么处理它们?

答案1

ls会将非 ASCII 字符(或者更确切地说,当前区域设置不支持的字符)打印为?.这就是为什么解析 的输出ls是一件坏事的原因之一。的输出ls应该是看着。在某些情况下,像这样,这些不是文件系统中存在的实际名称。

尝试类似的东西(这些将删除全部文件和目录,包括/path/to/dir

rm -rf /path/to/dir

或者

find /path/to/dir -delete

或者

find /path/to/dir -exec rm -rf {} +

或者

find /path/to/dir -print0 | xargs -0 rm -rf

修改以满足您的需求。例如,如果仅删除文件,请在示例-type f中的路径后面添加。find

只做rm -rf * 在该目录内(那是重要的,当前工作目录必须是要删除其文件和目录的目录)也可能就足够了。

也可以看看为什么不是解析ls

答案2

轻松删除以非打印字符命名的目录和/或文件的另一种方法是确定错误目录(或文件)的索引节点号并使用它删除目录(或文件):

cd /mypath || exit 1
ls -il    #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +

-xdev选项确保find不会下降其他文件系统上的目录。仅在文件系统内保证索引节点号是唯一的。

添加“-f”作为附加find选项以仅返回文件。

相关内容