이름에 콜론이 여러 개 있는 파일을 삭제하는 방법은 무엇입니까?

이름에 콜론이 여러 개 있는 파일을 삭제하는 방법은 무엇입니까?

이름에 콜론이 여러 개 있는 파일이 많은 폴더가 있습니다. 예를 들어: Mail::Message::Field::Full.3pm.gz.

삭제하는 방법을 알고 싶습니다.

나는 열심히 노력했다

rm Mail::Message::Field::Full.3pm.gz
rm Mail\:\:Message\:\:Field\:\:Full.3pm.gz
rm "Mail::Message::Field::Full.3pm.gz"

모든 결과는 동일합니다: rm: cannot remove 'Mail::Message::Field::Full.3pm.gz': Input/output error.

또한 일반 사용자 계정과 루트 사용자를 사용해 보았습니다. 두 경우 모두 결과는 위와 동일합니다.

rm옵션 과 -f결과가 동일합니다 .

파일 이름을 바꿀 때도 동일한 문제가 발생합니다.

물론 폴더에 대한 쓰기 액세스 권한이 있습니다.

의 출력은 ls -l다음과 같습니다

ls: cannot access Mail::Message::Field::Full.3pm.gz: Input/output error
-????????? ? ? ? ?            ? Mail::Message::Field::Full.3pm.gz

이것이 중요한지는 모르겠지만 파일은 NTFS 파티션에 있습니다.


고쳐 쓰다

하드웨어 문제는 아닌 것 같아요. 다른 모든 파일에 액세스(쓰기, 삭제, 생성, 압축 해제 등)할 수 있습니다. 그럼에도 불구하고 문제의 파일에 액세스할 수 없습니다.

답변1

파일이 NTFS 파티션에 있는 것이 중요합니다.

대부분의 UNIX 시스템에서 이 :기호는 특수 문자가 아니며 특히 Linux에서는 /특수 문자입니다. 커널에는 의미가 없습니다(일부 응용 프로그램에서는 특별한 의미를 부여하므로 사용하지 않는 것이 가장 좋습니다). Linux의 일반적인 ext2/ext3/ext4를 포함한 대부분의 UNIX 파일 시스템에서는 :다른 문자와 마찬가지로 파일 이름에 사용할 수 있습니다.

NTFS는 Windows 환경에서 왔기 때문에 더 엄격한(그러나 선택 사항) 규칙을 가지고 있습니다. Windows에서는 :파일 이름에는 허용되지 않습니다(또는 오히려 커널 수준에서는 허용되지만 대부분의 응용 프로그램에서는 지원되지 않습니다.기본 쉘 포함). 이것오픈 소스 NTFS 드라이버 NTFS-3G파일 이름을 만들지 않도록 시도하고 :, 기존의 유효하지 않은 파일 이름이 발견되면 혼란스러울 수 있습니다.

이것NTFS-3g 사용자 매뉴얼지적

이식성과 상호 운용성을 극대화하기 위해 항상 POSIX 네임스페이스에 새 파일을 생성합니다. 즉, 파일 이름은 대소문자를 구분하며 및 를 제외한 '/'모든 문자 가 허용됩니다 '\0'. 일부 응용 프로그램이 혼동될 수 있지만 이는 Windows에서 완전히 합법적입니다.

최신 버전의 ntfs-3g 드라이버를 사용하고 있고 파일 시스템이 windows_names이 옵션으로 설치되지 않았는지 확인하세요.

답변2

이름을 바꿀 때 동일하게 적용된다는 것은 이름을 바꿀 수 없거나 이름을 바꿀 수 있지만 삭제할 때 동일한 문제가 발생한다는 의미입니다(아마도 그렇지 않을 것 같습니다).

확인해 보세요. 와일드카드를 사용해 보셨나요? 파일이 너무 많지 않으면 다음과 같이 시도해 볼 수 있습니다.

 rm -i Mail*essag**.gz

이렇게 하면 -i삭제하기 전에 메시지가 표시되므로 필요한 파일만 삭제되고 있는지 확인할 수 있습니다.

비록 이것이 파일 이름 특성 문제라기보다는 권한이나 파일 시스템 문제인 것으로 의심됩니다. 또는 일부 하드웨어 오류를 나타내는 것일 수도 있습니다.

답변3

모든 내용을 주의 깊게 읽어본 결과 NTFS 파일 시스템이 손상된 것으로 의심됩니다.

나는 다음을 추천한다:

  1. Windows로 부팅
  2. 전체 파일 시스템 검사를 수행합니다(Linux 도구는 이 작업에 충분하지 않습니다).
  3. Linux로 재부팅하고 다시 시도해 보세요.

관련 정보