"mv" 파일의 inode 번호 이름이 깨졌습니까?

"mv" 파일의 inode 번호 이름이 깨졌습니까?

파일 이름에 인코딩 문제가 있는 파일이 여러 개 있습니다(독일어 움라우트, Windows에서 CD로 굽고 Windows에서 읽고 Seafile을 사용하여 Linux와 동기화합니다. 뭔가 잘못되었습니다...). Bash와 zsh는 움라우트 대신 "?"만 표시합니다. stat표시는 비슷합니다.

$ stat Erg�nzung.doc 
File: ‘Erg\344nzung.doc’
Size: 2609152         Blocks: 5096       IO Block: 4096   regular file
Device: 806h/2054d      Inode: 12321475    Links: 1

자동 완성을 통해서만 파일 이름을 입력할 수 있습니다. 이 파일의 이름을 어떻게 바꿀 수 있나요? LibreOffice(또는 다른 파일 형식을 위한 다른 프로그램)는 영향을 받는 파일을 읽을 수 없는 것처럼 보이며 "해당 파일이나 장치가 없습니다"라고 불평합니다.

저도 생각해봤는데 스위치 mv --by-inode 12321475 Ergänzung.doc가 없더라구요 . 또 무엇을 할 수 있나요?--by-inodemv

답변1

당신은 시도 할 수 있습니다:

find . -inum 12321475 -exec mv {} new-filename \;

또는

find . -inum 12321475 -print0 | xargs -0 mv -t new-filename

일반적으로 나는 exec보다 xargs를 선호합니다. 구글 왜요? 하지만 까다 롭습니다. 바라보다xargs를 사용하여 -exec +를 찾으세요. 어느 것을 선택할까요?

답변2

convmv이러한 문제에 대한 유틸리티가 있습니다. 파일 이름 인코딩을 Windows에서 cp1256utf8 등으로 변경할 수 있습니다 .

답변3

기록에 대해서만 올바른 xargs -0사용법은 다음과 같습니다.

find . -inum 12321475 -print0 | xargs -0 -I '{}' mv '{}' new-filename

그러나 이미 지적했듯이 어쨌든 그럴 필요는 없습니다.

관련 정보