2015-06-19

Ubuntu 用指令刪除特殊字元檔名的檔案

早期,在 UTF-8 還沒一統天下的時候,阿舍常常會收到或下載到一些壓縮檔裡面的檔案是用和系統不同的編碼的檔案名稱,當阿舍一解壓縮後,就會變成一堆亂碼的檔案名稱,然後,有些檔案的檔名就亂到很難複製貼上或怎麼刪就刪不掉,所以,有時候阿舍光要清除這些檔案就要花點時間哩 ! ...


最近,阿舍在看 Inode 的東西的時候才發現,原來,是可以透過 Inode 的編號來刪除檔案的,所以,就算檔名是亂七八糟,打不出來的文字也沒關係,只要能夠查到該檔案的 Inode 編號就可以利用價值 find 指令的 -delete 選項來把檔案給刪除哩 !

ls 指令加上 -i 選項會把 Inode 編號顯示在第一行
首先,要先查出該檔案的 Inode 編號,查詢的方式有二種,一個是用 stat 指令,另一個則是用 ls 指令搭配 -i 選項來列出檔案的 Inode 編號,不過,如果你是和阿舍一樣,是遇到無法輸入的檔名的話,stat 指令就用不到了,因為根本無法輸入來當作 stat 指令參數,所以,阿舍比較建議的方法,還是用 ls 加上 -i 選項會比較方便哩 !

# 用 stat 加檔名查詢檔案的 Inode 編號
$ stat arthurtoday.txt

# 用 ls 指令查檔案的 Inode 編號
$ ls -i | grep arthurtoday.txt

找到要刪除的檔案的 Inode 編號後,就可以利用 find 指令搭配 -inum 選項來指定 Inode 編號和 -delete 選項來刪除檔案哩 ! 下面是以阿舍要刪除的檔案是存在家目錄下,然後,要刪除的檔案的話 Inode 編號是 55688 為例的操作方式。

$ cd ~/
$ find . -inum 435304 -delete

除了用 Inode 編號來刪除檔案之外,只要你可以用滑鼠來選擇檔名做複製和貼上的動作的話,就阿舍的經驗來說,大部份的情況下,只要用 rm 指令再加上把貼上的亂碼檔名用雙引號包起來,這樣子也是可以刪除亂碼檔名的檔案的,因此,當遇到有檔案刪不掉時,可以先考慮用這個方式,不行的話,再用 Inode 編號來刪,就會比較省事一點囉 !

如果你對 Inode 不是瞭解,或是有興趣瞭解的話,請參考阿舍寫的這一篇


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁