아카이브의 수정 타임 스탬프가 추출 된 사본에 보존되지 않도록 파일을 추출한 경우 (추출 된 파일의 일반적인 수정 시간이 있음)이를 공격하는 올바른 방법은 수정 시간을 통하는 것입니다. 추출 된 모든 파일에는 해당 디렉토리에서 가장 최근에 수정 된 기존 파일보다 새로운 수정 시간 소인이 있습니다.
간단한 상황이 있습니다.
현재 디렉토리의 기존 파일 중 적어도 24 시간 동안 아무것도 터치하지 않았다고 가정하십시오. 지난 24 시간 동안 수정 된 것은 zip 파일에서 정크입니다.
$ find . -mtime -1 -print0 | xargs -0 rm
이것도 일부 디렉토리를 찾을 수 있지만, rm
그대로 두게됩니다. 그들은 두 번째 패스에서 처리 할 수 있습니다.
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
최근에 수정 된 디렉토리는 zip으로 수정되었습니다. rmdir
성공적으로 제거 되면 비어있는 것입니다. zip에 의해 터치 된 빈 디렉토리는 아마도 그 디렉토리에 의해 생성되었을 것입니다. 100 % 확신 할 수는 없습니다. 압축 해제 작업이 일부 파일을 비어있는 기존 디렉토리에 넣을 수 있습니다.
경우 find
트리에서 파일이 너무 최근에 수정 되었기 때문에 '의 24 시간 단위는 일을 위해 충분하지 않습니다, 나는 다음 간단한 무언가를 생각 하는데요 : 압축 해제 작업이 기존의 하위 디렉토리에 아무것도 넣지 않았다고 가정합니다. 즉, 압축이 풀린 모든 파일은 최상위 레벨의 파일이거나 이전에 없었던 새로운 하위 디렉토리이므로 Zip의 자료 만 포함합니다. 그때:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
이제 filelist
텍스트 편집기에서 열고 zip에서 나오지 않은 목록의 첫 번째 항목을 결정합니다. 해당 항목과 그 이후의 모든 항목을 삭제합니다. 남아있는 것은 우편 번호에서 온 파일과 디렉토리입니다. 먼저 이름의 공백과 이스케이프해야 할 따옴표 발생과 같은 문제를 육안으로 검사합니다. 그런 다음 필요한 경우 모든 것을 따옴표로 묶을 수 있습니다. 다음은 Vim을 사용한다고 가정합니다.
:%s/.*/"&"/
그런 다음 큰 줄로 묶으십시오.
:%j
이제 그 rm -rf
앞에 삽입 하십시오 :
Irm - rf<ESC>
커서 아래에서 행을 쉘 명령으로 실행하십시오.
!!sh<Enter>
확실히, 나는 이미 존재하는 파일을 지우거나 파일 이름 문제로 인해 망할 위험으로 인해이 작업 단계를 자동화하지 않습니다.
zip의 경로 목록을 얻는 명확한 경로를 찾으려면 파일로 캡처하고 매우 신중하게 살펴보고 필요한 편집을 수행 한 후 제거로 변환하십시오.
lq
옵션을 알지 못했지만unzizp
그의 주요 답변 주위에 고전적인 * nix 트릭을 추가했습니다.