我正在设置云服务器,发现我意外添加了一个名为^[[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
找出被转义的目录:
$ ls -b # \033[4~
移除方式:
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:FolderName
,cut -d: -f2
只选择FolderName
ls $( ..command.. )
使用的输出..command..
作为参数ls
答案4
尝试使用引号。
cd "\x1b[30m;"