2012-06-05 40 views

回答

4

這種技術不適用於所有文件。我曾經使用它來幫助數據恢復。

for i in /media/Daten/found.*/*.chk; do mv "$i" "$i".$(grep $(file -bi $i | awk '{print $1}' | sed 's/;//') /etc/mime.types | head -1 | awk '{print $2}'); done 

這種工作方式是它使用MIME類型的功能在file命令,然後裏grep /etc/mime.types吧,挑選在列表中的第一個擴展,然後將該文件重命名了這一點。

此命令將執行批量重命名,它會先移動並稍後提問,因此請100%確定您正在正確的目錄中運行此命令。

下一次,不要使用chkdsk來恢復文件。你可以將其損壞無法修復。 chkdsk將OM NOM NOM NOM你的數據,然後打嗝。在使用chkdsk之前,請始終使用恢復軟件取回所需的文件。

一般情況下,文件名爲.CHK雖然不.CHK(僅供參考)。

+0

THX,即工作。但如果沒有找到擴展名,你可以以某種方式不重命名文件?並排除目錄呢? – rubo77

+0

我已經給你所有的工具來解決這個工作。你所問的關於實施微不足道。研究'bash'if語句。與我的解決方案一起放置在拼盤上,並研究如何調整它,我們可以一起工作,爲您構建您想要的確切解決方案。 – OmnipotentEntity

+0

好吧,也許我會找出如何將exe擴展名改爲「.exe」而不是「.bin」。但一開始這已經適用於我。 thx;) – rubo77

3

要恢復特定的文件類型,先看看那裏的東西。測試在OS X:

file --mime -b /media/Daten/FOUND.*/*.CHK | sort | uniq 

application/octet-stream; charset=binary 
application/ogg; charset=binary 
application/pdf; charset=binary 
application/zip; charset=binary 
audio/x-wav; charset=binary 
image/jpeg; charset=binary 
image/png; charset=binary 
video/3gpp; charset=binary 

然後,對於類型,您希望保留:

mkdir /tmp/renamed 

for f in /media/Daten/FOUND.*/*.CHK 
do file --mime $f \ 
    | perl -n -e \ 
    '/^([^.]*).*(3gpp|jpeg|ogg|png|wav)/ && print "$1.CHK /tmp/renamed/$1.$2\n"' \ 
    | xargs cp 
done 

它使用file --mime(或file -I,或file -i在Linux上),以確定MIME類型,然後傳遞將文件名和MIME類型都與Perl一起使用,Perl使用正則表達式來捕獲基本名稱(如FILE0001)和文件類型(如jpeg),並打印一行如FILE0001.CHK /tmp/renamed/FILE0001.jpeg。最後,該行傳遞給cp

(該\繼續到下一行的單個行命令。)

+0

很酷的thx,但應該是一個小我信:文件-ib /media/Daten/found.00*/*.* |排序| uniq的;這部分工作,但其餘的我不能在Ubuntu上運行 – rubo77

+0

啊,不在OS X上:* -i如果文件是普通文件,請不要對其內容進行分類*與* -I,--mime導致文件命令輸出MIME類型字符串*。有趣的人們。那麼我會變成'--mime'! – Arjan

+0

其他部分的任何錯誤消息?也許把它一行(有一些分號)有幫助嗎? – Arjan

相關問題