2012-03-06 66 views
0

我恢復了一個錯誤的rm命令被激活的驅動器。現在我有一個包含逐步命名爲00000001.txt 00000002.txt百萬文本文件...
他們中的很多僅僅包含無法識別的字符作爲yÏÞxìϾûïgçØ> 0的文件夾| O> * SS>Ï3ìó} ..
怎麼可能我用bash輕鬆刪除包含字符的文件?如何刪除bash中包含未識別字符的所有文件?

+0

這是什麼意思是「無法識別」的字符?你將不得不澄清。你期望內容完全是ASCII嗎? – Borealid 2012-03-06 13:46:46

+0

@Borealid我可能想保留的文件是由用戶在正常例程中創建的文件..所以他們只是打開文本編輯器並保存他們的文件..我認爲ascii utf8和iso-8859-1可以作爲參考碼。我想刪除的文件是那些用普通編輯器打開時不可讀內容的文件。 – 2012-03-06 13:56:29

回答

2
for i in *.txt 
do 
    if ! chardet "$i" | grep -q 'ascii' 
    then 
     echo rm "$i" 
    fi 
done 
+0

對不起..也許我寫了我的問題很糟糕。無法識別的字符在文件內容中不在文件名中:) – 2012-03-06 14:17:39

+0

我已更新。您可以使用'chardet'命令來檢查文件的編碼。如果不是'ascii',請刪除它。 – kev 2012-03-06 14:24:44

+0

這正是我需要的!謝謝 :) – 2012-03-06 14:33:23

0

一般什麼honeyp0t說,但如果不工作,有使用系統工具clri,這通常被稱爲「猛藥」的另一種方式。

clri做什麼是直接刪除一個inode關閉filsystem。你需要知道文件的inode號碼。這裏的想法是:

  1. 您使用ls -il列出文件,其中inode編號是輸出中最左邊的數字。
  2. 對所有壞文件重複1),然後卸載文件系統。
  3. 運行clri的inode數的壞文件。
  4. 運行fsck並讓它修復損壞。

祝你好運。

編輯:

例子:

22005 drwxrwxr-x 2 bos bos  2504 Apr 13 2011 scripts 

22005是我的系統上的目錄 「腳本」 的inode編號。

+0

GNU find也可以基於inode刪除。 '找。 -maxdepth 1 -inum -delete' – jordanm 2012-03-07 01:54:02

0
egrep "[^a-Z ,.;:#+*?-9°$'\"<=>|_\!-]" {00000001..1000000}.txt 

應該是一個開始,顯示,包括哪些其他字符。

隨着

egrep -q FILE && rm FILE 

可以刪除一切,這不符合你的格局:

for f in {00000001..1000000}.txt 
do 
    egrep -q "[^a-Z ,.:#+*?-9°$'\"<=>|_\!-]" "$f" && rm "$f" 
done 

肯定是存在的正則表達式的一些可能的優化。

相關問題