我有一个在ls中显示为? ?
的文件:
drwxr--r-- 1 johndoe gid-johndoe 93756 Aug 22 09:10 .
drwxr--r-- 1 johndoe gid-johndoe 574633 Aug 22 09:18 ..
-rw-r--r-- 1 johndoe gid-johndoe 874857 Aug 12 15:25 ? ?
-rw------- 1 johndoe gid-johndoe 96342 Aug 22 08:41 .bash_history
当我尝试使用sed获取文件名时,我得到了这个奇怪的输出:
ls -la | sed 's/.*[0-9] //'
.
..
ash_history
我认为文件名必须有一个奇怪的编码,但我不知道如何获得'处理它'所以我可以打开/重命名/删除它。
如何获取此文件的句柄以打开/重命名/删除它?
修改
当我输入ls
并按Tab键自动完成时,该文件显示为^[ ^[
答案 0 :(得分:3)
感谢评论this link,我找到了解决方案:
ls -i
以获取inode编号find . -inum <inode> -ok rm '{}' \;
,并使用'are you sure?'
提示符删除inode编号。答案 1 :(得分:-2)
$touch '? ?' '? ?' '^[ ^['; ls -A1
? ?
???
? ?
$rm -i "$(ls|grep -E -m1 '[?[:cntrl:]]')"
rm: remove regular empty file '\033 \033'? y
$rm -i "$(ls|grep -E -m1 '[?[:cntrl:]]')"
rm: remove regular empty file '?\t?'? y
$rm -i "$(ls|grep -E -m1 '[?[:cntrl:]]')"
rm: remove regular empty file '? ?'? y
$ls -A
一定要使用rm -i来验证匹配的文件 - 一次匹配一个 - 正则表达式匹配文字问号以及任何?显示为不可见的控制字符
测试 - 创建3个文件 - 用文字? - 两者之间的标签? - 使用ESC控制字符 - 使用CTRL-V在bash终端中键入控制字符
function StripHTML(strhtml)
{
var tmpDiv = document.createElement("DIV");
tmpDiv.innerHTML = strhtml;
return tmpDiv.textContent || tmpDiv.innerText || "";
}
答案 2 :(得分:-3)
您应该尝试使用find和正则表达式。
find . -name "*" -exec ls '{}' \;
➜ t1 touch \?
➜ t1 ll
total 8.0K
-rw-rw-r-- 1 netsamir netsamir 0 Aug 22 19:02 ?
➜ t1 find . -name "*" -exec rm {} \;
rm: cannot remove '.': Is a directory
➜ t1 ll
total 0
➜ t1
➜ t1 touch "\? \?"
➜ t1 ll
total 8.0K
-rw-rw-r-- 1 netsamir netsamir 0 Aug 22 19:05 \? \?
➜ t1 rm "\? \?"
➜ t1 ll
total 0
➜ t1