Tengo un zip que contiene archivos con nombres muy largos.
Si intento extraer en la línea de comando, aparece el error "Nombre de archivo demasiado largo".
Si uso el administrador de archivo gráfico, no extraerá los archivos y no me permitirá cambiarles el nombre. El mismo problema ocurre si monte el archivo.
Puedo extraer y renombrar archivos individualmente usando:
unzip -p -c example.zip "long file name.ogg" > shortname.ogg
Esto no es práctico con muchos archivos.
¿Existe una herramienta que truncará los nombres de los archivos a medida que se extraen?
unzip -l <ARCHIVE>
y cómo desea que se trunquen los nombres? ¿Desea retener la estructura de directorios dentro del archivo durante la extracción?Respuestas:
Extraer
Podemos usarlo
zipinfo
como parte de este proceso, es un programa delzip
paquete.solo mostrará los nombres de los archivos
example.zip
, algo parecido a esto:para que podamos usar esta función para extraer todos los archivos:
long_fname=${i%.*}
: Elimina la extensión del nombre de archivo largo, por lo que en caso de que el nombre del archivo sea menor que 256 caracteres; No vamos a obtener una extensión duplicada.${long_fname:0:250}.${i##*.}
: Crea un nuevo nombre de archivo con un número legítimo de caracteres y también agrega una.
extensión real de archivo.Simplemente estamos ingresando a la lista de archivos y extraemos cada uno de ellos con un nuevo nombre de archivo legítimo que es de 256 caracteres.
Renombrar
Puede usar el
zipnote
comando, también es parte delzip
paquete.Obtenga una copia de seguridad de su archivo zip primero.
Ejecute este comando:
Abra los nombres usando un editor, se ve así:
Agregue nuevos nombres de archivo como este:
Luego, para cambiar el nombre de los archivos, use:
Los renombró a todos, también puede escribir un script simple que haga esto automáticamente por usted.
fuente
IFS= read -r i
en caso de que los nombres de los archivos comiencen con espacios en blanco o contengan elementos que el shell pueda interpretar como secuencias de escape.