Samba 마운트에서 이상한 이름으로 파일 이름 바꾸기

Samba 마운트에서 이상한 이름으로 파일 이름 바꾸기

이상한 이름을 가진 파일의 이름을 합리적인 이름으로 바꾸고 싶지만 그럴 수 없습니다.

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

나는 인터넷의 일부 장소에서 권장하는 inode 번호를 사용해 보았습니다.

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

어떻게 해야 합니까?

답변1

관련 의견 요약:

Unix 파일 시스템에서는 \0(nul) 및 (슬래시)를 제외한 /모든 문자를 파일 이름에 허용합니다. 물음표가 표시되는 이유는 ls단순히 현재 로케일에서는 파일 이름에 대해 특정 문자를 표시할 수 없기 때문입니다(이것도 이유 중 하나입니다).출력을 구문 분석하지 않아야 합니다.ls).

그러나 Samba 공유를 사용하면 표준 Unix 파일 시스템보다 파일 이름에 대한 요구 사항이 더 엄격해집니다.

중간 Samba 공유의 파일 이름이 "불법"이기 때문에 공유가 마운트된 시스템에서 올바른 이름으로 파일에 액세스할 수 없습니다.

mv확장된 와일드카드 패턴에 대한 Samba 공유에서 반환된 이름은 관리되는 파일 시스템에 있는 파일의 실제 이름이 아니라 Samba 자체 이름의 잘못된 버전이기 때문에 작동하지 않습니다 .

해결책은 실제로 파일을 호스팅하는 서버(Samba보다 덜 제한적인 명명 규칙을 사용하는 파일 시스템)에 로그인하고 그곳에서 파일 이름을 변경하는 것입니다. 이것이 옳은 일입니다.

추가 정보Unix 및 Linux이 문제에 대해 이야기해 봅시다.

답변2

Unix 셸에서 인용하는 방법을 배우기 전에 저는 emacs dired패턴을 사용하여 일치하기 어려운 파일의 이름을 바꾸거나 삭제했습니다. Emacs에서 디렉토리를 열면 됩니다:

emacs -q .

...그런 다음 화살표 키를 사용하여 수정하려는 파일로 이동하고 파일 이름을 로 바꿀 수 있습니다 R. ?사용 가능한 명령 목록이 제공됩니다(일치하기 어려운 파일을 삭제할 수도 있음).

그런 다음 C-x C-cemacs를 종료할 수 있습니다.

답변3

일반적으로 특이한 파일 이름의 경우 파일 이름 앞에 "./"를 추가하면 Linux가 이를 올바르게 인식합니다. 예: $ ls ./?j?Z?R?C1_000c.jpg

관련 정보