최근 내 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이 아닙니다.