如何刪除名稱中有多個冒號的檔案?

如何刪除名稱中有多個冒號的檔案?

我有一個包含很多文件的資料夾,其名稱有多個冒號。例如: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 上(只是/特殊)。它對核心沒有任何意義(儘管有些應用程式確實賦予它特殊意義,所以最好不要使用它)。在大多數 UNIX 檔案系統上,包括 Linux 習慣的 ext2/ext3/ext4,您可以:像其他字元一樣在檔案名稱中使用。

NTFS 有更嚴格(但可選)的規則,因為它來自 Windows 世界。在 Windows 中,:檔案名稱中不允許使用(或者更確切地說,在核心層級允許使用,但大多數應用程式不支持,包括預設的 shell)。這開源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,然後重試。

相關內容