最近,我的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文件,if也存在没有.7z.bad扩展名的同一个文件:.7z.bad文件我想检查原始文件存在的原因仅仅是为了另一个级别的安全性。
我恐怕无法在我的Qnap NAS中安装任何其他工具(如fdupes)。
发布于 2021-08-23 09:55:12
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发布于 2021-08-23 09:40:42
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找到的所有文件名传递给shell脚本,该脚本将遍历文件名,并检查每个没有.7z.bad后缀的文件名是否存在。如果是这样的话,它会删除带有.7z.bad后缀的文件,或者打印警告消息。
如果要测试解压缩文件是否存在且文件大小为非零,请用-f替换为-s。
https://unix.stackexchange.com/questions/665843
复制相似问题