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

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

이름에 콜론 기호가 여러 개 있는 파일이 너무 많은 폴더가 있습니다. 예를 들어: 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를 포함한 대부분의 유닉스 파일 시스템에서는 :다른 문자와 마찬가지로 파일 이름에 사용할 수 있습니다 .

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로 다시 부팅하고 다시 시도합니다.

관련 정보