如何在UNIX上使用envvariables名称删除具有特殊字符和目录的目录名称

我在这个库中search,我没有发现任何类似的问题,或者可能是我的search是不正确的。

我在我的客户端环境中遇到这个问题,自定义应用程序正在创build一个环境variables为“$ SRCDIR”和“$ HOME”的目录,而在创build这些目录的目录中,本身就是HOME目录path。 如果我说rm -rf $HOME那么当前目录$ HOME下的所有文件和子目录都将被删除。 如何删除这些不需要的目录。

 -rw-r--r-- 1 grp domain users 418051450 Apr 18 18:09 $SRCDIR -rw-r--r-- 1 grp domain users 418051450 Apr 18 18:09 $HOME 

还有一些目录是垃圾字符,如下例所示。

 -rwxr-xr-x 1 grp domain users 0 Feb 7 2106 ??????w?O???*????_6??t??Ó¡?>?tP??Ñ?|?C 

我如何删除它们?

对于垃圾名称,构建一个只捕获它们的通配符将是最容易的。 选择名称的可读部分(例如_6子字符串)并用星号包装。 首先尝试一下:

 ls *_6* 

如果列出垃圾名称,请继续删除垃圾名称:

 rm *_6* 

如果还列出其他名称,请尝试使通配符更具体,使用名称中的其他可读字符:

 ls *w*_6*tP*N*x* 

继续进行,直到找到只匹配不需要的文件的通配符。

如果你创建一个像–rw-rr–的目录。 要删除这个文件,请执行fo rm -rf ./--rw-rr--

确定必要文件/文件夹的inode数量:

 # ls -ila 14549980 drwxr-xr-x 3 root root 4096 Mar 5 20:45 ">?< 

并将其管道到rm

 find . -inum 14549980 -exec rm -ir {} \; 

在linux下试试zsh shell

 [root@rhel5-8 ~]# zsh [root@rhel5-8]~ 

然后使用选项卡完成删除该目录。

或者如果使用bash

 [root@rhel5-8 ~]# cd "??????w?O???*????_6??t??Ó¡?>?tP??Ñ?|?C???????>?̤-???y?X???N?x??H?????Ч)?n?5‌​??{@?~]?" 

进入该目录

你可以试试rm -rf'$ HOME''$ SRCDIR',因为单引号会阻止shell变量的扩展。 尝试与bash和ksh。

只是逃避美元符号。 试试像这样 –

 rm -rf \$HOME 

同样的甚至? 符号。

您可以使用c程序来避免shell / escape问题。 看看这个问题的答案。