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?
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.
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.