Shell-Script
按副檔名查找重複文件並刪除它們的腳本
最近我的 NAS 被勒索軟體攻擊,我所有的文件都被
7z
ip 了。我設法獲得了密碼並解壓它們,同時我將7zipped文件重命名為7z.bad
(這樣以後更容易刪除受影響的文件,而不是.7z
攻擊前我已經擁有的任何實際文件)。這是我用來提取和重命名文件的腳本:
while [ -n "$(find . -type f -name '*.7z' -print -quit)" ] do find . -type f -name "*.7z" -execdir /usr/local/sbin/7z x -pPASSWORD {} \; -execdir mv {} {}".bad" \; done
所以,我現在有很多重複,像這樣:
Phone book.xlsx Phone book.xlsx.7z.bad
我想做的是:
.7z.bad
在目前目錄(和所有子目錄)中查找任何文件- 對於找到的任何
.7z.bad
文件,如果沒有 .7z.bad 副檔名的相同文件也存在:- 刪除
.7z.bad
文件我想檢查原始文件是否存在的原因只是為了另一個級別的安全性。
恐怕我無法
fdupes
在我的 Qnap NAS 中安裝任何其他工具(如 )。
find . -type f -exec sh -c 'for name do rm -f -- "$name.7z.bad"; done' sh {} +
上面找到目前目錄中或下面的所有正常文件,然後嘗試將它們全部刪除,但
.7z.bad
首先添加到名稱的末尾。這樣,
.7z.bad
如果有相應的文件沒有該文件名後綴,則所有名稱以 結尾的文件都將被刪除。在其他空目錄中進行測試:
$ touch file-{1..5}.txt.7z.bad $ touch file-{1..3}.txt $ ls file-1.txt file-2.txt file-3.txt file-4.txt.7z.bad file-1.txt.7z.bad file-2.txt.7z.bad file-3.txt.7z.bad file-5.txt.7z.bad
$ find . -type f -exec sh -c 'for name do rm -f -- "$name.7z.bad"; done' sh {} +
$ ls file-1.txt file-2.txt file-3.txt file-4.txt.7z.bad file-5.txt.7z.bad