J'ai un zip qui contient des fichiers avec des noms très longs.
Si j'essaye d'extraire sur la ligne de commande, j'obtiens l'erreur "Nom de fichier trop long".
Si j'utilise le gestionnaire d'archives graphiques, il n'extrayera pas les fichiers et 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 en utilisant:
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 qui tronquera les noms de fichiers lors de leur extraction?
unzip -l <ARCHIVE>
et comment voulez-vous que les noms soient tronqués? Voulez-vous conserver la structure du répertoire à l'intérieur de l'archive pendant l'extraction?Réponses:
Extraire
Nous pouvons utiliser
zipinfo
dans le cadre de ce processus, c'est un programme dezip
package.affiche uniquement les noms des fichiers
example.zip
, quelque chose ressemble à:afin que nous puissions utiliser cette fonctionnalité pour extraire tous les fichiers:
long_fname=${i%.*}
: Supprime l'extension du nom de fichier long, donc si 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 légitime de caractères, ajoute également une.
extension réelle et un fichier.Nous faisons simplement une boucle dans la liste des fichiers et extrayons chacun d'eux avec un nouveau nom de fichier légitime de 256 caractères.
Renommer
Vous pouvez utiliser la
zipnote
commande, elle fait également partie duzip
package.Obtenez d'abord une sauvegarde de votre fichier zip.
Exécutez cette commande:
Noms ouverts à l'aide d'un éditeur, ça ressemble à ceci:
Ajoutez de nouveaux noms de fichiers comme celui-ci:
Ensuite, pour renommer les fichiers, utilisez:
Vous les avez tous renommés, vous pouvez également écrire un script simple qui le fait automatiquement pour vous.
la source
IFS= read -r i
dans le cas où les noms de fichiers commencent par un espace blanc ou contiennent des éléments que le shell peut interpréter comme des séquences d'échappement.