filename.exe
私の外付けハードドライブが132.6kbの大容量コピーを作成するWindowsウイルスに感染しています。
書いてみると、find . -type f -name "*.exe"
何千もの.exeファイルが見つかりますが、そのうち100〜200個だけが私のものです。
データを失うことなくウイルスファイルを抽出して一度に削除する賢い方法を知っていますか?
答え1
find
オプションで使用-size
:
find . -type f -iname '*.exe' -size 133k
または
find . -type f -iname '*.exe' -size 135783c
ファイルが間違っていると確認された場合は、-delete
コマンドにオプションを追加してそのファイルを削除できます。
からman find
:
-size n[cwbkMG] File uses n units of space, rounding up. The following suffixes can be used: `b' for 512-byte blocks (this is the default if no suffix is used) `c' for bytes `w' for two-byte words `k' for Kibibytes (KiB, units of 1024 bytes) `M' for Mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes) `G' for Gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes) The size does not count indirect blocks, but it does count blocks in sparse files that are not actu‐ ally allocated. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse files differently. The `b' suffix always denotes 512-byte blocks and never 1024-byte blocks, which is dif‐ ferent to the behaviour of -ls. The + and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 0 to 1,048,575 bytes.
答え2
Pythonを使って完了しました。テストされ、うまく動作します。
#!/usr/bin/python
import os
import re
di=[]
fip=[]
o=re.compile(r'.exe$')
for i,j,k in os.walk('path'):
di.append(i.strip())
for q in k:
fip.append(q.strip())
for n in di:
for g in fip:
u=os.path.join(n,g)
if re.search(o,u): #This step used to verify .exe file"
if os.path.isfile(u):
if str(os.stat(u).st_size) == "132":
os.remove(u)