공백과 구두점이 포함된 파일 이름 바꾸기

공백과 구두점이 포함된 파일 이름 바꾸기

누군가가 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원하는 엔터티에서 작업 중인지 확인할 수 있습니다.

관련 정보