Случайное местоположение извлечения - как вымыться?

Иногда я буду делать команду такой как

unzip tons_of_files.zip

И я забуду помещать-d для указания на подкаталог. Это заставляет текущую папку быть заполненной тоннами файлов, которые смешаны с существующими файлами.

Что лучший способ состоит в том, чтобы удалить все эти новые файлы и/или переместить их в новый каталог? Я хочу избежать необходимости вручную исследовать каталог и определять, был ли файл частью архива или уже присутствовал.

4
задан 12.10.2010, 22:25

3 ответа

Быстрый путь мог бы быть следующим:

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

Поскольку это делает автоматические стирания: используйте его на Ваш собственный риск. Видеть замену предварительного просмотра ... rm ... с ... echo rm ....

5
ответ дан 07.12.2019, 19:56

При извлечении файлов в каталоге, где Вы не изменили или переместили любые файлы в течение нескольких минут перед извлечением, можно сказать извлеченные файлы их очень недавним ctime. Это не прекрасно (если каталог содержит извлеченный файл, Вы не можете сказать, был ли он создан путем разархивации, или он существовал прежде (возможно, быть пустым)), но работает обоснованно хорошо на практике.

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

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

Эквивалентный Zsh:

mv *(cm-3) /other/directory

Следующий GNU находит, что файлы перемещений команды со столь же недавним 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
ответ дан 07.12.2019, 19:56

$, поскольку я в 'разархивировал-qql tons_of_files.zip | TR-s ""|, сокращают-d""-f 5 | sed 's/^.*///''; действительно повторите $i;готово

Изменение echo кому: rm.

Что это делает (в обратных галочках):

  1. файлы списка (one-bye-one)
  2. сожмите пробелы
  3. выберите 5-е поле
  4. удалите все, что является именем папки
1
ответ дан 07.12.2019, 19:56

Теги

Похожие вопросы