Cách đổi tên / giải nén tập tin với tên dài trong kho lưu trữ zip


11

Tôi có một zip chứa các tập tin với tên rất dài.

Nếu tôi cố gắng giải nén trên dòng lệnh, tôi sẽ gặp lỗi "Tên tệp quá dài".
Nếu tôi sử dụng trình quản lý lưu trữ đồ họa, nó sẽ không giải nén các tệp và nó sẽ không cho phép tôi đổi tên chúng. Vấn đề tương tự xảy ra nếu tôi gắn kết kho lưu trữ.

Tôi có thể trích xuất và đổi tên các tệp riêng lẻ bằng cách sử dụng:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

Điều này là không thực tế với rất nhiều tập tin.

Có một công cụ nào sẽ cắt bớt tên tập tin khi chúng được trích xuất không?


Đầu ra của unzip -l <ARCHIVE>cái gì và làm thế nào để bạn muốn cắt tên? Bạn có muốn giữ lại cấu trúc thư mục bên trong kho lưu trữ trong quá trình giải nén không?
David Foerster

Câu trả lời:


13

Để giải nen

Chúng ta có thể sử dụng zipinfonhư một phần của quy trình này, đó là một chương trình từ zipgói.

zipinfo -2 example.zip

sẽ chỉ hiển thị tên tệp trong example.zip, trông giống như:

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

vì vậy chúng tôi có thể sử dụng tính năng này để giải nén tất cả các tệp:

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*}: Xóa phần mở rộng khỏi tên tệp dài, do đó, trong trường hợp tên tệp nhỏ hơn 256 ký tự; Chúng tôi sẽ không nhận được một phần mở rộng trùng lặp.
  • ${long_fname:0:250}.${i##*.}: Tạo một tên tệp mới với số ký tự hợp pháp cũng thêm một .phần mở rộng thực và tệp.

Đơn giản là chúng tôi đang lặp vào danh sách tập tin và trích xuất từng tệp với tên tệp hợp pháp mới là 256 ký tự.


Đổi tên

Bạn có thể sử dụng zipnotelệnh, nó cũng là một phần của zipgói.

Nhận một bản sao lưu của tập tin zip của bạn đầu tiên.

Chạy lệnh này:

zipnote example.zip > names

Mở tên bằng trình chỉnh sửa, nó trông như thế này:

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

Thêm tên tệp mới như thế này:

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

Sau đó, để đổi tên tập tin sử dụng:

zipnote -w example.zip < names

Bạn đã đổi tên tất cả, bạn cũng có thể viết một tập lệnh đơn giản tự động làm việc này cho bạn.


Đó là vô cùng hữu ích, cảm ơn! Tôi không thể làm cho ví dụ zipnote hoạt động - và cái đầu tiên loại bỏ phần mở rộng tệp - nhưng nó đủ tốt cho những gì tôi cần làm. Cảm ơn!
Terence Eden

Tôi đã cập nhật câu trả lời, bây giờ nó cũng sẽ giữ phần mở rộng;)
Ravexina

Bạn nên sử dụng IFS= read -r itrong trường hợp tên tệp bắt đầu bằng khoảng trắng hoặc chứa những thứ mà trình bao có thể hiểu là chuỗi thoát.
David Foerster
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.