如何访问/删除意外以转义字符命名的文件夹?

如何访问/删除意外以转义字符命名的文件夹?

我正在设置云服务器,发现我意外添加了一个名为^[[4~(带转义代码)的文件夹。我想看看里面有什么,如果那只是一个错误,那么就删除该目录。但是我看不到cd内容ls。我试图找出转义代码,以便我可以输入类似的命令cd \x1b[30m;,并希望它能让我进入目录。

cd如果我通过搜索列出的第一个目录来删除或删除ls,会怎么样?这可能吗?因为当我执行时ls |grep 4会出现两个结果,其中一个是我想访问的那个。

找到转义字符串中的文件夹名称或将目录更改为ls找到的第一个目录可能是一种解决方案。我该如何解决这个问题?

答案1

解决这个问题的一个有趣方法是使用 Bash:cd进入目录(这很容易)。

然后我们检查文件名中是否有控制字符:如果你发出

printf 'strange: %s\n' *[[:cntrl:]]*

您应该在那里看到您的文件。如果没有,请尝试使用另一个字符类或修改 glob 以使其与您的文件名匹配。(但很可能,您只会得到一个奇怪的文件。)然后,有三种可能性:

  • 上一个命令仅发布了您的奇怪文件。然后,很简单,只需重命名它:

    mv -nv *[[:cntrl:]]* a_less_bizarre_name
    

    完毕!

  • 上面的命令发出了几个名称奇怪的文件名。然后,将它们全部重命名为:

    i=0
    for biz in *[[:cntrl:]]*; do
        mv -nv "$biz" a_less_bizarre_name$((++i))
    done
    

    完毕!

  • 上一个命令输出了几个名称,但您只想更改一个。在这种情况下,我们将把它们全部放在一个数组中,并在前面加上一个数字,然后我们只选择我们想要的一个:

    bizarre=( *[[:cntrl:]]* )
    for index in "${!bizarre[@]}"; do
        printf "%s --> %s\n" "$index" "${bizarre[index]}"
    done
    # Then, look at the index of the one you want to rename
    # If its index is 42, issue:
    mv -nv "${bizarre[42]}" a_less_bizarre_name
    

    完毕!

笔记。如果您使用这些命令,请确保使用正确的引号(即我给出的引号)。不要更改引号!

评论。你很可能首先想发出mv我给出的带有一个echo在前面的,只是为了看看它会做什么,例如,

echo mv -nv *[[:cntrl:]]* a_less_bizarre_name

echo并在您满意时删除!无论如何,我使用-n开关是为了不覆盖其他现有文件。如果您按照我输入的方式使用它们,所有这些命令都是相当安全的。

祝你好运!

答案2

  1. 找出被转义的目录:

    $ ls -b
    # \033[4~
    
  2. 移除方式:

    rmdir -v `echo -e "\033[4~"`
    

答案3

我不知道它是否也适用于特殊字符,但值得一试。尝试运行

ls -d */ | grep -n "" | more

在父文件夹中;这将打印其所有目录,前面带有数字和冒号:(类似于1:folder1 2:folder2...)。找到与您的文件夹对应的数字,然后运行以下行(用${num}数字替换)

cd $(ls -d */ | grep -n "" | grep "^${num}:" | cut -d: -f2)

或者用引号:

cd "$(ls -d */ | grep -n '' | grep ^${num}: | cut -d: -f2)"
  • ls -d */列出所有目录
  • grep -n ""匹配所有包含的行"",即每一行,并且选项-n枚举每一行
  • grep "^${num}:"仅打印第${num}
  • 因为这条线就像LineNumber:FolderNamecut -d: -f2只选择FolderName
  • ls $( ..command.. )使用的输出..command..作为参数ls

答案4

尝试使用引号。

cd "\x1b[30m;"

相关内容