刪除 Linux 中損壞的文件

刪除 Linux 中損壞的文件

我怎麼才能刪除這個檔案?我認為這是 VFAT 檔案系統中的損壞檔案。

?????????  ? ?       ?        ?            ? 100.jpg

答案1

一種可能性是找出inode文件的編號,您可以通過運行ls -i.這將傳回兩列——第一列是索引節點,第二列是檔案名稱。然後,您可以使用該find命令僅選擇具有該特定 inode 的文件,並將其刪除。

sh-4.1$ ls -i .
  17921 somefile.ods
    169 someotherfile.conf
    305 -????????? ? ? ? ? ? 100.jpg
  18048 yetanotherfile.jpg

sh-4.1$ find . -maxdepth 1 -inum 305 -ok rm '{}' \;
< rm ... -????????? ? ? ? ? ? 100.jpg > ? y

由於 inode 很可能對於檔案來說是唯一的(假設沒有硬連結),因此這將允許您在刪除時不存在通配符固有的風險。 find 指令的maxdepth和選項ok讓您更不可能意外找到錯誤的檔案。

答案2

我不確定這裡的任何答案是否確實存在 Stig 報告的問題。我剛剛在 ext4 檔案系統上遇到了這個問題:

# ls -l /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
total 0
?????????? ? ? ? ?            ? easy-rsa-master

# ls -i /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
? easy-rsa-master

# rm -r /tmp/dependencies
rm: descend into directory ‘dependencies’? y
rm: cannot remove ‘/tmp/dependencies/easy-rsa-master’: No such file or directory
rm: remove directory ‘dependencies’? y
rm: cannot remove ‘dependencies’: Directory not empty

檔案本身及其檔案屬性已損壞。 ls -i 清楚地顯示沒有 inode ID。不使用 rm 就無法解決問題。甚至 rm -rf 也會遍歷目錄並嘗試直接(靜默)刪除檔案。

我的解決方案是重新建立沒有違規檔案的目錄。然後您可以將該目錄移動到另一個位置,例如/tmp。重新啟動後或每當您的發行版清理 /tmp 目錄(希望如此)時它就會消失。

答案3

我推薦 cHao 建議的一個稍微更具防禦性的版本:

rm -i ./*100.jpg*

製造-i商會rm詢問您是否刪除與通配符相符的每個文件;這可以確保您不會意外刪除其他檔案。前導./確保所有檔案名稱都將被視為檔案名稱而不是進一步的選項rm(看起來您可能在那裡有一個前導破折號,這就是為什麼這很重要)。

順便說一句,有可能存在隱形角色裡面字串“100.jpg”。如果上面給你一個類似「rm: ./*100.jpg*: not found」的錯誤訊息,那就是原因。 ls -1fw | cat -v可能會有幫助。

答案4

你可以嘗試

rm *100.jpg*

? 要嘛是字面上的問號,要嘛是沒有意義的字。不管怎樣,如果檔案系統沒有被管理,作業系統本身(和外殼)通常可以刪除檔案。

如果檔案系統不過,搞砸了,刪除東西可能會讓事情變得更糟。我建議您啟動 Windows 來掃描驅動器,並刪除其中的檔案(如果可以的話)。

相關內容