오타를 만들었습니다.
$ history
169 9:34 la /usr/local/etc/
170 9:35 sudo mkdir ^C
171 9:36 sudo mkdir /usr/local/etc/dnsmasq.d
이제 ^ C (ctrl + C)라는 파일이 있습니다 !! 사용 ls
하면 물음표가 표시됩니다 (로캘로 인해)?
% ls -al
total 60
drwxr-xr-x 2 root wheel 512 Jan 21 09:35 ? <- this one
drwxr-xr-x 5 admin wheel 512 Jan 21 16:24 .
drwxr-xr-x 3 root wheel 512 Jan 20 14:29 ..
-rw-r--r-- 1 admin nobody 1114 Jan 20 19:10 .cshrc
-rw------- 1 admin wheel 6002 Jan 21 15:27 .history
-rw-r--r-- 1 admin nobody 182 Jan 20 14:29 .login
-rw-r--r-- 1 admin nobody 91 Jan 20 14:29 .login_conf
-rw------- 1 admin nobody 301 Jan 20 14:29 .mail_aliases
-rw-r--r-- 1 admin nobody 271 Jan 20 19:04 .mailrc
-rw-r--r-- 1 admin nobody 726 Jan 20 19:05 .profile
-rw------- 1 admin nobody 212 Jan 20 14:29 .rhosts
-rw-r--r-- 1 admin nobody 911 Jan 20 19:06 .shrc
drwx------ 2 admin nobody 512 Jan 20 15:05 .ssh
drwxr-xr-x 2 admin wheel 512 Jan 20 19:08 bin
과
% ls -i
3611537 ? 3611534 bin
이 파일을 제거하고 싶습니다. 시도 mv
하고 탭 완성을 사용할 때 나에게 표시됩니다.
% mv
^C/ bin/
^ C :-/를 입력 할 수 없습니다.이 파일을 어떻게 제거합니까?
답변
^V
( ctrl+ v)는 다음 키 누름에 대한 일종의 이스케이프 시퀀스로 작동하여 일반적으로 관련된 작업을 수행하는 대신 관련 값을 삽입합니다.
이것을 사용하면 ^V^C
( ctrl+ v, ctrl+ c) 터미널에서 어려운 파일 이름을 입력해야합니다.
답변
inode로 파일을 제거 할 수도 있습니다.
$ ls -i1
290742 foo
293246 ^C
$ find . -inum 293246 -delete
무슨 일이 있어도, 하나님을 위하여, 넣지 마십시오 -delete
전에 -inum
:
$ touch foo bar baz quux
$ find . -name '*u*' -delete
$ ls
bar baz foo
$ find . -delete -name 'b*'
find: `./baz': No such file or directory
find: `./bar': No such file or directory
$ ls
$
축하 합니다. 모든 파일 을 지 웠습니다 . 와 find
, 인수 순서 문제 !
답변
다른 옵션은 rm -ri ./*
; rm
파일과 디렉토리를 삭제하기 전에 물어볼 것이므로 y
“나쁜”파일과 n
다른 모든 파일 에 답장 하면됩니다.
실제로, rm -ri ./?
“나쁜”파일은 한 문자 길이 이므로을 수행 하여 필요한 답글 수를 줄일 수도 있습니다 .
답변
한 가지 옵션은 파일 이름을 이외의 다른 이름으로 찾아 보는 것 ls
입니다. 당신이 그것이 그대로 Ctrl+ 로 생성되었다는 것을 알고 있다면 C, 제어 문자 표를 사용 하거나 Python에서 제공하는 것과 같은보다 친숙한 인터페이스를 사용하여 생성 된 ASCII 문자를 찾을 수 있습니다 :
>>> import os
>>> os.listdir('.')
['\x03', ...]
또 다른 옵션은 ls
예를 들어를 사용하여 출력의 16 진 덤프를 보는 것 hexdump
입니다.
그런 다음이 bash 명령을 사용하여 파일을 삭제할 수 있습니다.
rmdir "$(printf '\x03')"
(큰 따옴표 만 인쇄하려는 문자가있는 경우 필요한 IFS
변수와 같은, \x20
또는 \x0A
, 그러나 당신이 당신이 쉘 등 필드 분할을 수행 할 모르면 명령 대체를 인용하는 좋은 습관이다)
답변
이런 상황에서는 종종 관련 파일과 일치 하는 와일드 카드 패턴 을 쉽게 찾을 수 있습니다.
귀하의 경우 이것은 간단합니다 ?
(모든 파일 이름을 정확히 한 문자로 일치시키는 것 ).
원하는 것과 실제로 일치하는지 확인하십시오.
ls -ld ?
그런 다음 디렉토리를 제거하십시오.
rmdir ?
이것을 탭 완성 과 결합 할 수도 있습니다 . 입력 할 수 있습니다
rmdir ?
탭을 누르면 bash에서 다음과 같이 바뀝니다.
rmdir ^C/
Enter 키를 누르면 원하는 작업을 수행합니다.
답변
Midnight Commander (mc)를 사용하여 파일을 삭제할 수 있습니다. 위 / 아래 버튼으로 선택하고 F8을 누르십시오.
인코딩으로 인해 파일 이름에 이상한 문자가있는 경우가 종종 있습니다.
답변
또 다른 방법 : stat
디렉토리 이름을 이스케이프 처리하는 데 사용 하십시오.
$ stat *|grep File:
File: ‘\003’
이제 파일 이름의 표현을 알았으므로 다음을 사용하여 이름으로 파일을 제거 할 수 있습니다 printf
.
$ rmdir -v "$(printf '\003')"
rmdir: removing directory, ‘\003’
또는 bash를 사용하는 경우 다음을 피할 수 있습니다 printf
.
$ rmdir -v $'\003'
rmdir: removing directory, ‘\003’