이상한 이름의 파일 이름을 합리적인 이름으로 바꾸고 싶지만 할 수 없습니다. :/
$ 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
관련 의견 요약:
\0
Unix 파일 시스템에서는 (nul) 및 /
(슬래시) 를 제외한 모든 문자를 파일 이름에 허용합니다 . 물음표가 표시되는 이유는 ls
현재 로케일에서 파일 이름의 일부 문자를 표시할 수 없기 때문입니다(이는출력을 구문 분석하는 것을 피해야 합니다.ls
).
그러나 Samba 공유를 사용하면 표준 Unix 파일 시스템보다 파일 이름에 대한 요구 사항이 더 엄격해집니다.
파일 이름이 중간 Samba 공유에서 "불법"이었기 때문에 공유를 마운트하는 시스템에서 올바른 이름으로 파일에 액세스할 수 없었습니다.
mv
globbing 패턴 확장을 위해 Samba 공유에서 반환된 이름은 호스팅 파일 시스템에 있는 파일의 실제 이름이 아니고 Samba 자체적으로 변조된 이름이었기 때문에 작동하지 않았습니다 .
해결책은 실제로 파일을 호스팅하는 서버(Samba보다 덜 제한적인 명명 규칙이 있는 파일 시스템)에 로그인하고 그곳에서 파일 이름을 변경하는 것이었습니다. 이것이 올바른 행동 방침이었습니다.
Unix 및 Linux도 참조하세요.이 질문에 대해 이야기하다.
답변2
유닉스 쉘에서 인용하는 방법을 배우기 전에는 emacs dired
모드를 사용하여 일치하기 어려운 파일의 이름을 바꾸거나 삭제했습니다. Emacs에서 디렉토리를 열면 됩니다:
emacs -q .
... 그런 다음 화살표 키를 사용하여 수정하려는 파일로 이동하고 R
. ?
사용 가능한 명령 목록이 표시됩니다(일치하기 어려운 파일도 삭제할 수 있습니다).
그런 다음 C-x C-c
emacs를 종료하면 작업이 완료됩니다.
답변3
흔히 특이한 파일 이름의 경우 파일 이름 앞에 "./"를 추가하면 Linux가 이를 올바르게 인식합니다. 예: $ ls ./?j?Z?R?C1_000c.jpg