이름을 알 수 없는 디렉토리로 이동

이름을 알 수 없는 디렉토리로 이동

ls타르볼의 압축을 푸는 동안 "????????????????????"라고 보고되는 디렉토리를 발견했습니다 . 아마도 이름이 유니코드가 아닌가? 어쨌든 폴더에 액세스하는 방법을 찾을 수 없습니다. 나는 노력했지만 cd $(find -inum inode_number)그것은 나에게

"bash: cd: ./??????????: No such file or directory".

inode 번호로 폴더에 직접 액세스하는 다른 방법이 있습니까?

답변1

모든 디렉터리(또는 파일)에서 작업할 수 있는 일반적인 접근 방식은 해당 inode 번호를 사용하는 것입니다.

먼저 ls를 사용하여 해당 폴더의 inode를 가져옵니다.

ls -lia
  • -l긴 목록의 경우(선택 사항)
  • -iinode 값을 얻으려면
  • -a숨겨진 파일까지 포함한 모든 파일 보기(선택 사항)

목록의 첫 번째 열에 다음과 같은 긴 숫자가 표시됩니다.

2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME

이제 다음을 사용하여 해당 디렉터리로 변경할 수 있습니다.

cd "$(find -inum ######)"

...그러나 ######을 디렉토리 목록에 있는 긴 숫자로 대체합니다.

물론 명령이 반드시 cd. 그것은 수 rm, cp, mv,...

답변2

해당 문자는 국제 문자일 가능성이 높으므로 en_US 문자 집합에서 제어 코드로 나타날 가능성이 높으며, 이것이 ls가 해당 문자를 물음표로 표시하는 이유입니다.

이는 배포판이 전역 프로필에서 기본적으로 별칭 지정 ls를 선택했기 때문일 수 있습니다. 예를 들어:

alias ls='ls -q'

쉘에 입력하여 배포판이 그렇게 했는지 확인할 수 있습니다:

alias ls

그러면 다음과 같은 내용이 인쇄됩니다.

$ alias ls
alias ls='ls --color=auto'

아래 링크된 페이지에서는 "ls -b"를 수행하면 8진수 제어 코드가 표시되어 최소한 어떤 문자가 사용 중인지 알 수 있다고 제안합니다.

http://www.arsc.edu/arsc/support/howtos/nonprintingchars/

이것이 작동하지 않는다고 가정하면 하단에 다른 옵션도 언급되어 있습니다.

내가 지금까지 알지 못했던 OctalDump라는 도구(Debian의 경우 -- /usr/bin/od)

$ ls | od -b

제어 코드의 8진수 형식이 표시됩니다.

$ ls | od -c

끝에 있을 수 있는 숨겨진 추가 공백을 포함하여 문자를 표시합니다(예제에서 끝에 있는 추가 공백에 유의하세요).

어떤 제어 문자가 사용되고 있는지, 추가로 숨겨진 공백이 있는지 여부를 알고 나면 제어 문자를 이스케이프 처리하여 디렉토리로 CD를 이동하는 방법을 알아낼 수 있습니다. 실패하면 디렉터리 이름을 바꾸는 몇 가지 옵션이 있습니다.

또한 위의 페이지에는 mv 명령을 통해 제어 문자를 제거하는 빠르고 더러운 방법이 있습니다. 공백을 벗어나는 한 작동할 것이라고 생각하지만 물음표를 벗어나지 마십시오(따라서 단일 문자로 만듭니다). 와일드카드), 그리고 이 악성 디렉토리가 있는 디렉토리에 다른 어떤 것도 존재하지 않는 한. 이러한 명시적 요구 사항이 있는 이유는 와일드카드 문자와 단일 공백만 사용하므로 와일드카드가 실수로 다른 파일이나 디렉터리와 일치하는 것을 원하지 않기 때문입니다.

위의 방법이 작동하지 않으면 다른 응답에서 언급한 찾기 방법을 다른 방식으로 거의 확실하게 사용할 수 있습니다. 시도했다고 말한 inode 번호를 사용하여 디렉토리로 cd를 시도하는 대신 inode 번호를 사용하여 이름을 바꿀 수 있습니다. 전체 세트를 복사하세요.위 페이지의 해당 명령에 대한 행("원하는 이름" 부분을 이름을 바꾸려는 실제 이름으로 바꾸십시오).

디렉터리 이름을 바꾸면 해당 디렉터리에 액세스할 수 있습니다. 이름에 제어 코드가 있는 파일도 포함되지 않기를 바랄 뿐입니다. 그렇지 않으면 방금 이름을 바꾼 디렉터리의 모든 파일(및/또는 하위 디렉터리)에 대해 헹구고 반복해야 합니다. 이 시점에서 for 루프는 아마도 모든 파일의 이름을 1부터 증가시켜 숫자로 지정하는 것이 현명할 것입니다. :-)

답변3

"?" 셸에서는 특별한 의미를 가지며 "아무 것도 포함하지 않는 모든 문자"를 의미합니다. 따라서 파일 이름이 실제로 "????????????????????"인 경우 아마도 "?"를 피해야 할 것입니다. (그리고 공백도 포함) cd \?\?\?\?\?\?\ \?\?\?\? (아직 시도하지 않았다면)

이는 누군가 의도적으로 파일에 왜곡/손상/불법 인코딩이 아닌 까다로운 이름을 부여했다고 가정합니다.

답변4

거기에 무엇이 있는지 확인하는 쉬운 방법 중 하나는 FileZilla를 사용하여 컴퓨터에 FTP를 보내는 것입니다. 그런 다음 FileZilla를 사용하여 디렉터리 이름을 바꿀 수 있습니다.

관련 정보