Місце випадкового витягу - як почистити?


4

Іноді я виконуватиму таку команду, як

unzip tons_of_files.zip

І я забуду поставити -d, щоб вказати на підкаталог. Це призводить до того, що поточна папка заповнюється тоннами файлів, змішаних із існуючими файлами.

Який найкращий спосіб видалити всі ці нові файли та / або перемістити їх у новий каталог? Я хочу уникнути необхідності вручну вивчити каталог і визначити, чи файл був частиною архіву чи вже був.


Відповіді:


5

Швидкий спосіб може бути наступним:

unzip -qql tons_of_files.zip | while read -r l d t n ; do rm -fr "$n" ; done

Оскільки це робить автоматичні стирання: використовуйте його на свій страх і ризик . Щоб побачити попередній перегляд замінити ... rm ...на ... echo rm ....


1

Якщо ви витягли файли в директорії , в якій ви не змінені або переміщати будь-які файли в протягом декількох хвилин до вилучення, ви можете сказати , розпаковані файли їх зовсім недавно CTime . Це не ідеально (якщо каталог містить витягнутий файл, ви не можете сказати, чи був він створений розпакуванням або він існував раніше (можливо, він був порожнім)), але працює досить добре на практиці.

Наступна команда GNU find переміщує файли та каталоги в поточний каталог, ctime якого менше 2 хвилин тому до /other/dir. ls -lctrможе допомогти знайти відповідний час відсічення.

find . -mindepth 1 -maxdepth 1 -cmin -2 -exec mv {} /other/dir \;

Zsh еквівалент:

mv *(cm-3) /other/directory

Наступна команда GNU find переміщує файли з аналогічним недавнім ctime у дереві каталогів, корінням у поточному каталозі, на аналогічний шлях під /other/dir.

find . -mindepth 1 -cmin -2 -type f -exec sh -c '
    for x; do
      mkdir -p "$0/${x%/*}"
      mv "$x" "$0/$x"
    done
  ' /other/dir {} +

Zsh еквівалент (майже: цей відтворює всю ієрархію каталогів, а не лише каталоги, які містять файли):

autoload zmv
mkdir -p ./**/*(/cm-3:s"|.|/other/dir|")
zmv -Q '(**/)(*)(.cm-3)' /other/dir/'$1$2'

1

$ для i в `unzip -qql tons_of_files.zip | tr -s "" | вирізати -d "" -f 5 | sed 's /^.*///' `; робити відлуння $ i; зроблено

Змінити echoна rm.

Що це робиться (всередині задньої панелі):

  1. файли списку (один на один)
  2. вичавити пробіли
  3. виберіть 5-е поле
  4. видаліть усе, що є назвою папки

0

Припустимо, що ваш поточний робочий каталог - це папка, з якої ви випадково вилучили файл:

unzip -Z1 ../../accidentally-extracted.zip | xargs rm

Пояснення:

  1. unzip -Z1 перераховує всі файли в zip-файлі рядок
  2. xargs передає кожен рядок як аргумент rm

Якщо ви не знаходитесь у папці, до якої ви випадково вилучились, ви можете ненавмисно видалити файли, якщо вони відповідають одному з файлів у zip.

Якщо ви не знаєте, ви можете працювати xargsз , -pщоб зробити це спонукає Вас для кожного виконання. Ви можете зробити перші пару страт, щоб бути впевненим, що ви щось не зіпсували.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.