web-dev-qa-db-fra.com

Comment renommer / extraire des fichiers avec des noms longs dans l'archive Zip

J'ai un zip qui contient des fichiers avec des noms très longs.

Si j'essaie d'extraire sur la ligne de commande, j'obtiens le message d'erreur "Nom du fichier trop long".
Si j'utilise le gestionnaire d'archives graphiques, les fichiers ne seront pas extraits et il ne me permettra pas de les renommer. Le même problème se produit si je monte l'archive.

Je peux extraire et renommer des fichiers individuellement à l'aide de:

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

Ce n'est pas pratique avec beaucoup de fichiers.

Existe-t-il un outil permettant de tronquer les noms de fichiers au fur et à mesure de leur extraction?

8
Terence Eden

Extraire

Nous pouvons utiliser zipinfo dans le cadre de ce processus, c’est un programme du package Zip.

zipinfo -2 example.Zip

affichera uniquement les noms de fichiers dans example.Zip, quelque chose qui ressemble à:

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

afin que nous puissions utiliser cette fonctionnalité pour extraire tous les fichiers:

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%.*}: Supprime l'extension du nom de fichier long, donc dans le cas où le nom de fichier est inférieur à 256 caractères; Nous n'allons pas obtenir une extension en double.
  • ${long_fname:0:250}.${i##*.}: crée un nouveau nom de fichier avec un nombre de caractères légitime, ajoute également un . et une extension réelle du fichier.

Nous faisons simplement une boucle dans la liste des fichiers et extrayons chacun d’entre eux avec un nouveau nom de fichier légitime de 256 caractères.


Renommer

Vous pouvez utiliser la commande zipnote, elle fait également partie du package Zip.

Obtenez d'abord une sauvegarde de votre fichier Zip.

Exécutez cette commande:

zipnote example.Zip > names

Ouvrez les noms en utilisant un éditeur, ça ressemble à ça:

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

Ajoutez de nouveaux noms de fichiers comme ceci:

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

Ensuite, pour renommer des fichiers, utilisez:

zipnote -w example.Zip < names

Vous les avez tous renommés, vous pouvez également écrire un script simple qui le fait automatiquement pour vous.

11
Ravexina