누군가가 Global Linux 3.0.31-0.9 서버에 여러 개의 공백, 대괄호, 물음표 및 콜론이 포함된 파일 이름을 가진 파일을 배치했습니다.
어찌할 바가 없어서 이름을 바꾸거나 삭제할 수 없습니다!
첨부된 파일 이름과 명령의 예는 "횡설수설"이 포함된 파일을 삭제/이름 바꾸려고 합니다.여기.
내 ls
결과:
-rw-r--r-- 1 root root 11306 May 2 03:25 who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
-rw------- 1 root root 15797 Jun 12 12:59 .viminfo
-rw------- 1 root root 1200 Jun 12 13:00 .lesshst
drwxrwxrwx 32 root root 4096 Jun 13 00:00 .snapshot
-rw------- 1 root root 32976 Jun 13 14:05 .bash_history
답변1
입력하기 어려운 이름을 가진 파일을 작업하는 쉬운 방법은 완성 기능을 사용하는 것입니다. 이 경우 이름의 처음 몇 글자는 입력하기 쉽기 때문에 입력한 후 를 누르세요 Tab.
$ mv 누가 Tab찾았나요.txt
첫 번째 문자를 결정할 수 없는 경우 를 눌러 현재 디렉토리의 모든 파일 이름을 Tab순환 할 수 있습니다../
쉘의 완성 명령은 프로그래밍된 방식 '
을 사용하여 \
인용된 문자열을 생성 합니다.
또는 이 인용 문자열을 직접 만들 수도 있습니다. 작은따옴표 내에서는 작은따옴표 자체를 제외한 모든 문자가 정상적으로 해석됩니다. 따라서 파일 이름에 작은 따옴표가 포함되어 있지 않으면 작은 따옴표 사이에 붙여 넣으세요. 하지만 ls --show-control-chars
인쇄할 수 없는 문자로 바꾸는 것이 아니라 실제 파일 이름(인쇄된 대로)이 필요합니다 . 파일 이름에 작은따옴표가 있는 경우 '\''
(작은따옴표, 백슬래시, 작은따옴표, 작은따옴표)로 바꾸십시오. 예를 들어 이라는 파일의 경우 it's
를 사용할 수 있습니다 'it'\''s'
.
또는 해당 파일에만 일치하는 와일드카드 패턴을 만들 수 있습니다. 예를 들어, 이 경우:
$ ls -d w*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
wibble
내 예에는 일치하는 파일이 두 개 있으므로 와일드카드로는 충분하지 않습니다. 문자를 추가하면 됩니다.
$ ls -d wh*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
mv who* found.txt
첫 번째 문자를 인쇄할 수 없는 경우 이름의 다른 부분과 일치하는 다른 패턴을 선택할 수 있습니다. [!#-z]*
또는 같은 [!0-9A-Z_a-z]*
패턴을 사용하여 [![:alnum:]]*
파일 이름 시작 부분의 일반 문자를 제외할 수 있습니다 .
파일 이름이 -
(ASCII 대시 또는 하이픈)으로 시작하는 경우 옵션으로 해석될 수 있습니다. ./-wibble
이를 방지하기 위해 사용하세요 .
답변2
문제가 되는 파일 이름을 따옴표로 묶는 것이 파일 이름을 삭제하거나 이름을 바꾸는 가장 쉬운 방법일 것입니다. 먼저 테스트 파일을 만듭니다.
rm " -myfile(1):ok?"
파일이 하이픈으로만 시작하는 경우 "--"를 사용하여 더 이상 옵션이 없으며 선행 하이픈이 명령 매개변수임을 명령에 알립니다.
rm -- -myfile
파일 이름에 인쇄할 수 없는 문자가 포함된 경우 find
해당 inode 번호를 확인한 후 해당 문자를 제거할 수 있습니다.
find . -iname "*myfile*" -exec ls -i {} +
9225180 ./ -myfile(1): 알았어?
find . -inum 9225180 -exec rm -i {} +
./ -myfile(1) 삭제: 가능합니까?
-i
명령에 (대화형) 응답을 추가합니다. 예를 들어 rm
원하는 엔터티에서 작업 중인지 확인할 수 있습니다.