linux 如何在UNIX上删除带有特殊字符的目录名和带有env变量名的目录

tnkciper  于 2023-03-29  发布在  Linux
关注(0)|答案(8)|浏览(166)

我在这个仓库里做了一个搜索,我没有找到任何类似的问题,或者可能是我的搜索不正确。
我在我的客户端环境中遇到了这个问题,一个自定义应用程序正在创建带有环境变量“$SRCDIR”和“$HOME”的目录,并且创建这些目录的目录本身就是HOME目录路径。如果我说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

如何删除它们?

au9on6nz

au9on6nz1#

对于垃圾名称,最简单的方法是构造一个只捕获它们的通配符。选择名称的 * 可读 * 部分(例如_6子字符串)并将其用星号 Package 。首先尝试一下:

ls *_6*

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

rm *_6*

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

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

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

lsmd5eda

lsmd5eda2#

确定所需文件/文件夹的信息节点编号:

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

并将其通过管道传输到rm

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

q9rjltbz3#

如果你创建了一个类似--rw-r--的目录。要删除这个文件,请执行以下操作rm -rf ./--rw-r-r--

whitzsjs

whitzsjs4#

在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‌​??{@?~]?"

进入那个目录

uklbhaso

uklbhaso5#

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

js81xvg6

js81xvg66#

把美元符号去掉。像这样-

rm -rf \$HOME

甚至?符号也是如此。

mcvgt66p

mcvgt66p7#

你可以使用一个c程序来避免shell/escape问题。看看this question的答案。

bksxznpy

bksxznpy8#

替代inode方法:
ls-ila
记下inode编号,例如1234567
rm -r $(find -inum 1234567)

相关问题