最近、私のNASはランサムウェアの攻撃を受け、すべてのファイルが7z
盗まれました。パスワードを調べて抽出すると同時に名前を変更しました。7圧縮ファイルを削除します(攻撃前にすでに持っていた実際のファイルで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に他のツール(たとえば)をインストールできないか心配です。
答え1
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
答え2
find . -type f -name "*.7z.bad" -exec sh -c '
for file; do
if [ -f "${file%.7z.bad}" ]; then
rm -- "$file"
else
echo "keeping file $file" >&2
fi
done
' sh {} +
これは、見つかったすべてのファイル名をfind
シェルスクリプトに渡し、ファイル名を繰り返して、サフィックスのない.7z.bad
各ファイル名が存在することを確認します。この場合、サフィックスが付いたファイルを削除し.7z.bad
、それ以外の場合は警告メッセージを印刷します。
-f
使用。 。 。代わりに-s
解凍されたファイルがあるかどうかをテストするには、そしてファイルサイズが0ではありません。