抱歉,如果我没有使用正确的术语来命名这些“退格字符”。
我想清理包含两个文件的目录,这两个文件的名称中似乎包含退格键。如果我列出目录:
ls -la
我明白了:
-rwxrwxrwx 1 guy guy 729 Jun 26 2007 z_regular.mk
-rwxrwxrwx 1 guy guy 1 Sep 7 2016
-rwxrwxrwx 1 guy guy 3220 Sep 27 2
我想我错误地用“退格字符”输入了文件名,所以我们再也看不到这些名称了。
如何重命名最后两个文件?
我不知道怎么称呼他们。是否有一个ls
选项允许我以十六进制或其他形式显示文件名,以及如何在命令中使用最新的文件名mv
?我使用的是 AIX Unix TLS v6。
编辑:
这些文件分别为 2 和 4 个del
字符:
ls -lb
给出
-rwxrwxrwx 1 guy guy 1 Sep 7 2016 \177\177
-rwxrwxrwx 1 guy guy 3220 Sep 27 2 \177\177\177\177\177
但找到了解决方案如何删除没有名称的文件不适用于我在 AIX 中的情况。
到目前为止,我尝试了以下方法但没有成功:
l>ls -l $'\0177\0177'
$\0177\0177 not found
l>ls -l '\0177\0177'
\0177\0177 not found
l>ls -l '\177\177'
\177\177 not found
答案1
语法$'\ooo'
(来自 ksh93,现在可以在大多数现代的类似 Bourne 的 shell 上找到,包括zsh
, bash
, mksh
, FreeBSD sh
)使用标准echo
(与 C 和大多数其他语言一样)与八进制转义的语法相反。因此,\
后面最多包含 3 个八进制数字:$'\177'
。$'\0177'
会像$'\017'7
。所以:
ls -ld $'\177\177'
mv $'\177\177' better-name
(请注意\177
, 又名^?
ASCIIDEL
中的字符,是不是退格键^H
///BS
字符\10
)
答案2
我在建议重复的底部找到了解决方案:
识别节点号
ls -lbi 25553 -rwxrwxrwx 1 guy guy 1 Sep 7 2016 \177\177 25559 -rwxrwxrwx 1 guy guy 3220 Sep 27 2 \177\177\177\177\177
那么从以下位置返回时就可以移动
find
:find . -inum 25553 |xargs -I{} mv {} recovered.x find . -inum 25559 |xargs -I{} mv {} recovered.y