如何在macOS上rm目录中带有引号和问号的名称

时间:2018-07-23 03:47:24

标签: shell rm

我有两个目录,它们的名称很奇怪,如下所示:

"?????+ "BizComponent               
"?+ "BizComponent

,现在我尝试删除它们,但失败了。当我输入rm -r '然后输入tab时,它会给我:

"^J^I^I^I^I+ "BizComponent/BizComponent/        
"^J+ "BizComponent/


然后,当我键入rm -r "^J^I^I^I^I+ "BizComponent/BizComponent/时,它会给我没有这样的文件或目录

4 个答案:

答案 0 :(得分:1)

问题在于您的文件名包含一个特殊字符,但这不一定是您看到的字符。示例(摘自here):

$ touch zzz yyy $'zzz\nyyy'
$ ls
yyy  zzz  zzz?yyy

如您所见,创建了带有新行的文件名,但是ls将其打印为?。那么我们如何删除呢?

方法1: ls可用的选项是--quoting-style=shell-escape,这使您可以查看如何键入要删除的文件名(适用于文件和目录):

$ ls --quoting-style=shell-escape
yyy   zzz  'zzz'$'\n''yyy'
$ rm 'zzz'$'\n''yyy'
$ ls
yyy   zzz

方法2::第二种方法是使用find使用inode编号(适用于文件和目录):

$ touch zzz yyy $'zzz\nyyy'
$ ls -li
total 2
3886009 -rw-r--r-- 1 user group 0 Jul 23 12:56 yyy
3886008 -rw-r--r-- 1 user group 0 Jul 23 12:56 zzz
 662083 -rw-r--r-- 1 user group 0 Jul 23 12:56 zzz?yyy
$ find . -inum 662083 -delete      
$ ls -li
total 1
3886009 -rw-r--r-- 1 user group 0 Jul 23 12:56 yyy
3886008 -rw-r--r-- 1 user group 0 Jul 23 12:56 zzz

答案 1 :(得分:0)

好像您的目录名中有一些特殊字符。您可以使用带有全局变量的循环:

for dir in *BizComponent; do
  rm -r -- "$dir"
done

答案 2 :(得分:0)

由于外壳扩展,您需要转义特殊字符? + " ^space。因此,要引用文件,您需要像这样删除/引用它们:

rm -rf \"\?\?\?\?\?+\ \"BizComponent/

rm -rf \"\?\+\ \"BizComponent

rm -rf \"\^J\^I\^I\^I\^I+\ \"BizComponent/BizComponent/

等等。

答案 3 :(得分:0)

您为什么不尝试rm -rf "?????+ BizComponent" | echo $?