Якщо ви вилучили файли таким чином, що часові позначки модифікації в архіві не зберігаються у витягнутих копіях (а, скоріше, вилучені файли мають звичайний час модифікації), то правильний спосіб атакувати це через час модифікації. Усі вилучені файли мають новішу часову позначку модифікації, ніж останній змінений існуючий файл у цьому каталозі.
Ось проста ситуація.
Припустимо, що жоден із існуючих файлів у поточному каталозі не торкався принаймні 24 години. Тому все, що було змінено протягом останніх 24 годин, є сміттям із zipfile.
$ 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>
Безумовно, я б не автоматизував кроки цього завдання через ризик стерти файли, які вже були там, або перекрутити через проблеми з іменем файлу.
Якщо ви збираєтесь піти очевидним шляхом отримання списку шляхів на блискавці, тоді захопіть його у файл, перегляньте його дуже уважно і перетворіть на видалення після будь-якого необхідного редагування.
lq
варіантівunzizp
, я просто додав кілька класичних прийомів * nix навколо його головної відповіді.