Zip arşivinde uzun adlara sahip dosyaları yeniden adlandırma / çıkarma


11

Çok uzun isimleri olan dosyaları içeren bir zip var.

Komut satırında ayıklamaya çalışırsam, "Dosya adı çok uzun" hatasını alıyorum.
Grafik arşiv yöneticisini kullanırsam dosyaları ayıklamaz ve yeniden adlandırmama izin vermez. Arşivi bağlarsam aynı sorun oluşur.

Dosyaları kullanarak ayrı ayrı ayıklayıp yeniden adlandırabilirim:

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

Bu, birçok dosya için pratik değildir.

Dosya adlarını ayıklanırken kesecek bir araç var mı?


Çıktısı nedir unzip -l <ARCHIVE>ve isimlerin nasıl kısaltılmasını istersiniz? Çıkartma sırasında arşivin içindeki dizin yapısını korumak istiyor musunuz?
David Foerster

Yanıtlar:


13

Ayıklamak

zipinfoBu sürecin bir parçası olarak kullanabiliriz , bu zippaketten bir programdır .

zipinfo -2 example.zip

yalnızca dosya adlarını gösterir, example.zipşuna benzer:

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

tüm dosyaları ayıklamak için bu özelliği kullanabiliriz:

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%.*}: Dosya adının 256 karakterden az olması durumunda uzantıyı uzun dosya adından kaldırır; Yinelenen bir uzantı almayacağız.
  • ${long_fname:0:250}.${i##*.}: Meşru sayıda karakter ile yeni bir dosya adı oluşturur ayrıca bir .ve dosya gerçek uzantısı ekler .

Sadece dosya listesine giriyoruz ve her birini 256 karakter olan yeni bir meşru dosya adıyla çıkarıyoruz.


Yeniden adlandırmak için

zipnoteKomutu kullanabilirsiniz , bu da zippaketin bir parçası .

Önce zip dosyanızın yedeğini alın.

Bu komutu çalıştırın:

zipnote example.zip > names

Adları bir düzenleyici kullanarak açın, şöyle görünür:

@ 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)

Bunun gibi yeni dosya adları ekleyin:

@ 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)

Sonra dosyaları yeniden adlandırmak için şunu kullanın:

zipnote -w example.zip < names

Hepsini yeniden adlandırdınız, bunu sizin için otomatik olarak yapan basit bir komut dosyası da yazabilirsiniz.


Bunlar inanılmaz derecede faydalı, teşekkürler! Zipnote örneğini çalıştıramadım - ve ilki dosya uzantısını kaldırıyor - ama bu yapmam gereken şey için yeterince iyi. Teşekkürler!
Terence Eden

Cevabı güncelledim, şimdi de uzantıyı koruyacak;)
Ravexina

IFS= read -r iDosya adlarının boşlukla başlaması veya kabuğun kaçış dizileri olarak yorumlayabileceği şeyler içermesi durumunda kullanmalısınız .
David Foerster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.