我有一個包含很多文件的資料夾,其名稱有多個冒號。例如: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 檔案系統已損壞。
我建議:
- 啟動進入 Windows
- 執行完整的檔案系統檢查(Linux 工具還不足以完成此任務)
- 重新引導至 Linux,然後重試。