ls: 'filename'에 접근할 수 없습니다: 해당 파일이나 디렉터리가 없습니다(그러나 파일은 존재합니다)

ls: 'filename'에 접근할 수 없습니다: 해당 파일이나 디렉터리가 없습니다(그러나 파일은 존재합니다)

HFS+ 포맷 드라이브는 SATA/USB 도크를 통해 Ubuntu 상자에 연결됩니다.

fsck.hfsplus에서는 분할 문제가 보고되지 않았습니다.

영향을 받는 파일에 대해 "ls"(또는 다른 항목)를 실행하려고 하면 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다. 컨테이너 폴더에서 "ls -lh"를 실행하면 동일한 문제가 발생하지만 파일은 여전히 ​​목록에 표시되지만 다음 형식으로 표시됩니다.

-rw-r--r-- 1 501 dialout   53M Mar  4 15:26 normal_file
-????????? ? ?   ?           ?            ? uncooperative_file

나는 다른 파일의 501:dialout 소유권에 대해 신경 쓰지 않습니다(드라이브는 다른 컴퓨터에 있습니다).

이로 인해 영향을 받는 일부 파일이 있습니다. 이름에 유니코드 및/또는 이모티콘이 포함된 파일인 것 같습니다.

나는 시도했다:

  • "ls"는 "-b" 및 "-q" 옵션을 사용하지만 아무것도 표시하지 않습니다.
  • "ls -lh > ~/tmp.txt"를 입력하고 "vi"를 편집하여 이름에서 불필요한 바이트를 감지합니다.
  • "chown 루트: 루트 파일 이름"
  • "chmod 644 파일 이름"

파일은 "ls"의 출력에 나타나고 탭 완성도 이를 채웁니다. 하지만 어떤 종류든실제상호작용에 실패했습니다.

누구든지 지침을 제공할 수 있습니까? 결국에는 이 파일을 다른 상자에 rsync/scp할 수 있기를 원하며(불행히도 드라이브 마운트에서는 제대로 작동하지 않습니다) ls/mv를 수행할 수 있는 것이 좋은 출발점이 될 것이라고 생각했습니다.

편집: bash를 사용합니다. 탭 완성은 전체 파일 이름을 채우지만 일부 문자 대신 "???"가 포함됩니다(현재 원래 문자에 대해서는 확실하지 않음). 소스 상자의 로케일:

LANG=en_CA.UTF-8
LANGUAGE=en_CA:en
LC_CTYPE="en_CA.UTF-8"
LC_NUMERIC="en_CA.UTF-8"
LC_TIME="en_CA.UTF-8"
LC_COLLATE="en_CA.UTF-8"
LC_MONETARY="en_CA.UTF-8"
LC_MESSAGES="en_CA.UTF-8"
LC_PAPER="en_CA.UTF-8"
LC_NAME="en_CA.UTF-8"
LC_ADDRESS="en_CA.UTF-8"
LC_TELEPHONE="en_CA.UTF-8"
LC_MEASUREMENT="en_CA.UTF-8"
LC_IDENTIFICATION="en_CA.UTF-8"
LC_ALL=

답변1

macOS는 HFSplus에서 파일 이름을 UTF16으로 인코딩할 수 있는데, 이는 Linux에 UTF16 로케일이 없기 때문에 운이 없다는 의미입니다. 기본적으로 로케일은 UTF8이며 특정 문자를 표시하지 않습니다. 이러한 문자는 UTF16 문자일 가능성이 높습니다.

정말 안 됐구나.

답변2

Bash에서 이름에 탭 완성 기능을 사용할 수 있으므로 파일 이름을 변경하여 새 파일 이름에서 ASCII가 아닌 문자를 제외해 보세요. 예를 들어:

mv uncoop???erative_file cooperative_file

가능하다면 MacOS에 마운트된 폴더보다는 원본 컴퓨터에서 이 작업을 수행하여 컴퓨터 간 문자 변환으로 인한 잠재적인 위험을 피하는 것이 좋습니다. MacOS와 ls가 인식하는 파일 이름이 있으면 이를 재동기화할 수도 있습니다.

나는 실제로 이 정확한 실험을 실행했고 Raspian 상자에서 mv uncoop???erative_file Cooperative_file을 실행할 수 있었고 iterm2 창 Mac에서 파일을 rsync하는 것을 포함하여 NFS를 통해 내 Mac에 공유된 Cooperative_file과 상호 작용할 수 있었습니다.

관련 정보