Как «отменить» команду распаковки?

19

Я использовал «unzip XXX.zip» для распаковки zip-файла, к сожалению, я ошибаюсь.

Теперь я хочу удалить все файлы и каталоги, сгенерированные "unzip".
Как я могу отменить это?

hero2008
источник

Ответы:

29

использовать этот:

unzip -l filename |  awk 'BEGIN { OFS="" ; ORS="" } ; { for ( i=4; i<NF; i++ ) print $i " "; print $NF "\n" }' | xargs -I{} rm -v {}

Используйте это, если вы настроены скептически (запросит подтверждение)

unzip -l filename |  awk 'BEGIN { OFS="" ; ORS="" } ; { for ( i=4; i<NF; i++ ) print $i " "; print $NF "\n" }' | xargs -I{} rm -iv {} 
Абхиджит Растоги
источник
Сбой, если в файлах есть пробелы в именах ... (+1 теперь с -iправкой. :)
sarnold
Проблема в awk '{print $4}'- имя файла с пробелами может быть в $4 $5 $6 .... :)
sarnold
1
Ok. Исправлено это тоже.
Абхиджит Растоги
5
FTR это также удаляет оригинальный zip-файл
sjr
Мой путь:unzip -l foo.zip | awk 'NR>3{print $NF}' | egrep -v '\--|files'|xargs rm -r
zhuguowei
5

Вы в затруднительном положении; стандартная zipinfo(1)утилита не предоставляет никакого механизма для извлечения однозначных имен файлов из архива. Но вы можете подойти ближе:

zipinfo -1 /path/to/zip/file.zip | xargs -d '\n' rm -i

Если вы уверены, что ни в одном из файлов нет символов новой строки, вы можете удалить -iопцию rm(1)(что наверняка станет утомительным).

sarnold
источник
4
unzip -Z -1 <filename.zip> | xargs -I{} rm -v {}

Выполняет задание, потому что -Zвызывает zipinfoутилиту, а -1опция заставляет ее печатать только имена файлов

Вы можете найти более подробную информацию об этом через man unzipи man 1 zipinfoкоманды

Пратю Барония
источник
1

Если вы хотите очистить каталог после случайного разархивирования, не создавая сначала папку, вы можете создать папку, распаковать в нее, а затем:

rm -r ` ls folder `

«` »очень полезно для цепочки команд, но это очень буквально.

Комментарии улучшили этот ответ, если вы хотите удалить также скрытые файлы (что вы, вероятно, делаете), сделайте это

rm -r ` ls -A folder `
chrispepper1989
источник
извините за поспешность к неправильному синтаксису, можно ли убрать голосование?
chrispepper1989
1
Если zip отказался перезаписывать какие-либо файлы, оригиналы будут удалены. Если какие-либо скрытые файлы были разархивированы, они не будут удалены (если вы не используете ls -a).
gmarmstrong
1
Или, скорее, ls -Aчтобы избежать ошибок в листинге .и..
gmarmstrong
0

Чтобы сделать это в Nautilus (без командной строки), вы можете просто перейти туда, где вы случайно распаковали файлы, отсортировать файлы, нажав на вкладку «Модифицированные», затем выбрать и удалить все файлы, помеченные с точным временем выполнил команду распаковать

cameronroytaylor
источник
1
Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос. К сожалению, в Linux нет Windows Explorer.
Дэвид Постилл
Ах да! До сих пор мне не приходило в голову, что unzip не был командой терминала Windows. Благодарность! Я проверю, имеет ли Наутилус похожую функциональность, и отредактирую ответ. В противном случае, я просто удалю это.
Камеронройтайлор
-1
unzip -Z -1 /path/to/zip/file.zip | xargs -I{} rm -rf {}
Игорь Щеглаков
источник
2
Хотя это может дать ответ на вопрос, было бы лучше, если бы вы могли объяснить, почему это так.
DavidPostill