Làm thế nào để xóa hoàn tác lệnh giải nén?


19

Tôi đã sử dụng "giải nén XXX.zip" để giải nén tệp zip, không may, tôi mắc lỗi.

Bây giờ tôi muốn xóa tất cả các tập tin và thư mục được tạo bởi "giải nén".
Làm thế nào tôi có thể hoàn tác nó?

Câu trả lời:


29

dùng cái này:

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

Sử dụng điều này nếu bạn nghi ngờ (sẽ nhắc xác nhận)

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

Thất bại nếu bất kỳ tệp nào có khoảng trắng trong tên của họ ... (+1 bây giờ với -ichỉnh sửa. :)
sarnold

Vấn đề là ở awk '{print $4}'- một tên tệp có khoảng trắng có thể nằm trong $4 $5 $6 .... :)
đăng

1
Đồng ý. Đã sửa nó quá.
Abhijeet Rastogi

5
FTR này cũng xóa tệp zip gốc
sjr

Cách của tôi:unzip -l foo.zip | awk 'NR>3{print $NF}' | egrep -v '\--|files'|xargs rm -r
zhuguowei

5

Bạn đang ở một vị trí khó khăn; zipinfo(1)tiện ích tiêu chuẩn không cung cấp bất kỳ cơ chế nào để lấy tên tệp rõ ràng ra khỏi kho lưu trữ. Nhưng , bạn có thể đến gần:

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

Nếu bạn chắc chắn rằng không có tệp nào có dòng mới trong đó, bạn có thể xóa -itùy chọn này rm(1)(chắc chắn sẽ rất tẻ nhạt).


4
unzip -Z -1 <filename.zip> | xargs -I{} rm -v {}

Có phải công việc vì -Zgọi zipinfotiện ích và -1tùy chọn yêu cầu nó chỉ in tên tệp

Bạn có thể tìm thêm chi tiết về điều này thông qua man unzipman 1 zipinfocác lệnh


1

Nếu bạn muốn dọn sạch thư mục của mình sau khi vô tình giải nén mà không tạo thư mục trước, bạn có thể tạo thư mục, giải nén vào đó và sau đó:

rm -r ` ls folder `

"` "Siêu hữu ích cho các chuỗi lệnh nhưng nó rất chính xác.

Các ý kiến ​​đã cải thiện câu trả lời này, nếu bạn muốn đảm bảo bạn cũng xóa các tệp bị ẩn (điều mà bạn có thể làm), hãy làm điều này

rm -r ` ls -A folder `

lời xin lỗi vì vội vã đến cú pháp không chính xác, bỏ phiếu xuống có thể được gỡ bỏ?
chrispepper1989

1
Nếu zip từ chối ghi đè lên bất kỳ tập tin nào, thì bản gốc sẽ bị xóa. Nếu bất kỳ tập tin ẩn nào được giải nén, chúng sẽ không bị xóa (trừ khi bạn sử dụng ls -a).
gmarmstrong

1
Hay đúng hơn, ls -Ađể tránh các lỗi từ danh sách ...
gmarmstrong

0

Để thực hiện việc này trong Nautilus (không có dòng lệnh), bạn chỉ cần điều hướng đến nơi bạn vô tình trích xuất các tệp, sắp xếp các tệp bằng cách nhấp vào tab "Đã sửa đổi", sau đó chọn và xóa tất cả các tệp có nhãn chính xác theo thời gian bạn đã chạy lệnh giải nén.


1
Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu. Thật không may, Linux không bao gồm Windows Explorer.
DavidPostill

À, vâng! Nó đã xảy ra với tôi rằng giải nén không phải là một lệnh thiết bị đầu cuối cho đến bây giờ. Cảm ơn! Tôi sẽ kiểm tra xem Nautilus có chức năng tương tự không và chỉnh sửa câu trả lời. Nếu không, tôi sẽ loại bỏ nó.
cameronroytaylor

-1
unzip -Z -1 /path/to/zip/file.zip | xargs -I{} rm -rf {}

2
Trong khi điều này có thể trả lời câu hỏi, nó sẽ là một câu trả lời tốt hơn nếu bạn có thể cung cấp một số lời giải thích tại sao nó làm như vậy.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.