2013-06-21 37 views
0

因此,在我的一個目錄中我跑擊:恢復不可執行的文件已被錯誤地改變

chmod -R ugo+rx 

轉動發文件在此目錄(和之內的所有目錄)與可執行權限的文件英寸現在

,我既可以嘗試使用

chmod -$ ugo-x <a ton of non-executable file extensions> 

或通過消除一切可執行權限恢復這不是一個可執行文件(備份是不是一個選項)

的任何建議最好的方式去做這件事?這個目錄(外部硬盤)包含大量的數據和程序,但其中沒有一個對機器功能至關重要。

+0

什麼是你想實現什麼?沒有備份,撤消此操作是不可能的。 – l0b0

回答

1

正如l0b0告訴你的,不可能在沒有備份的情況下恢復它。

一些幫助可能來自file命令,什麼可以檢測編譯的可執行文件以及帶有shebang行的腳本。

對於粗略的想法,你可以嘗試:

find /mnt/hdd -type f -print | file -f - 

find /mnt/hdd -type f -print | file -i -f - 

,你會看到什麼文件=檢測類型。如果檢測到一些可執行文件,您可以嘗試保留這些文件,並從其他文件中移除可執行文件。其餘文件必須手動 - 櫻桃挑...

以上file -f -stdin讀取文件名。此功能在FreeBSD - 我沒有Linux。如果您file命令有沒有-f開關,你可以嘗試(慢得多)

find . -type f -print0 | xargs -0 file 
0

大多數文件都被認爲是不可執行的,所以剛開始用

find dir -type f -exec chmod a-x {} \; 

然後,您可以搜索應該有+ x的文件。我甚至不會用file麻煩,因爲它的許多不同類型的可執行腳本的區分,我們希望所有的人:

find dir -type f -exec grep -q -e '^.ELF' -e '^#!' \; -print -exec chmod a+x {} \; 

此套+ X在任何語言interpretted腳本,再加上ELF二進制文件。

一個比較模糊的版本,可用於進一步減少誤報,收益遞減:

find dir -type f -exec bash -c 'sed 1p "$1" | grep -q -e "^.ELF" -e "^#!"' -- {} \; -print -exec chmod a+x {} \;