目錄損壞,刪除它們時出現問題

目錄損壞,刪除它們時出現問題

我的 Linux 系統中有一個目錄,因為某些軟體故障,創建了一些帶有垃圾名稱的目錄,如下所示,我在刪除它們時遇到問題,

$ ll
total 1532
drwxr-xr-x   2 sensage sensage   4096 Apr 19 16:56 -?$??
drwxrwxr-x 248 sensage sensage   4096 Apr 23 11:37 .
drwxrwxr-x  99 sensage sensage   4096 Apr 16 14:23 ..
drwxr-xr-x   2 sensage sensage   4096 Apr  6 14:54 }???;?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 03:01 }??=?|
-rw-r--r--   1 sensage sensage     88 Apr 22 13:37 $
drwxr-xr-x   2 sensage sensage   4096 Apr  2 12:43 ?
drwxr-xr-x   2 sensage sensage   4096 Mar 20 02:51 ?=??&?
drwxr-xr-x   2 sensage sensage   4096 Apr 11 08:40 ?;%??;
drwxr-xr-x   2 sensage sensage   4096 Apr 14 09:38 ?:????
drwxr-xr-x   2 sensage sensage   4096 Mar 22 17:21 ?(?>~?
drwxr-xr-x   2 sensage sensage   4096 Apr  1 13:45 ?[???%
drwxr-xr-x   2 sensage sensage   4096 Apr  3 14:03 ?@????
drwxr-xr-x   2 sensage sensage   4096 Apr 12 16:18 ??
drwxr-xr-x   2 sensage sensage   4096 Apr 17 16:38 ??&???
drwxr-xr-x   2 sensage sensage   4096 Mar 25 02:43 ??+???
drwxr-xr-x   2 sensage sensage   4096 Apr 19 00:46 Ü¡?,??
drwxr-xr-x   2 sensage sensage   4096 Mar 28 18:54 ÚŸ??"?
drwxr-xr-x   2 sensage sensage   4096 Mar 27 01:04 ???(?
drwxr-xr-x   2 sensage sensage   4096 Apr 19 22:41 ??ͨ?`
drwxr-xr-x   2 sensage sensage   4096 Apr 15 11:44 ?????-

正如您可以看到藍色的目錄名稱。當我想刪除它們時,出現以下錯誤:

$ ls -1  | grep -v 20 | xargs rm -rf 
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
rm: invalid option -- ¼
Try `rm ./'-¼$Þ¸Í'' to remove the file `-\274$\336\270\315'.
Try `rm --help' for more information.

我該怎麼處理它們?

答案1

ls會將非 ASCII 字元(或更確切地說,當前區域設定不支援的字元)列印為?.這就是為什麼解析 的輸出ls是一件壞事的原因之一。的輸出ls應該是看著。在某些情況下,像這樣,這些不是檔案系統中存在的實際名稱。

嘗試類似的東西(這些將刪除全部檔案和目錄,包括/path/to/dir

rm -rf /path/to/dir

或者

find /path/to/dir -delete

或者

find /path/to/dir -exec rm -rf {} +

或者

find /path/to/dir -print0 | xargs -0 rm -rf

修改以滿足您的需求。例如,如果僅刪除文件,請在範例-type f中的路徑後面新增。find

只做rm -rf * 在該目錄內(那是重要的,目前工作目錄必須是要刪除其檔案和目錄的目錄)也可能就足夠了。

也可以看看為什麼不是解析ls

答案2

輕鬆刪除以非列印字元命名的目錄和/或檔案的另一種方法是確定錯誤目錄(或檔案)的索引節點號並使用它刪除目錄(或檔案):

cd /mypath || exit 1
ls -il    #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +

-xdev選項可確保find不會下降其他檔案系統上的目錄。僅在檔案系統內保證索引節點號是唯一的。

新增“-f”作為附加find選項以僅傳回檔案。

相關內容