6 votos

Mover un archivo en un directorio con más de 7000 archivos

Estoy en un GoDaddy hosting compartido Linux de servidor ("ilimitado" de hosting).

Tengo una carpeta con imágenes de los productos para una tienda de comercio electrónico que contiene más de 7000 imágenes.

GoDaddy me dijo que yo no estoy permitido tener más de 1024 archivos en un solo directorio y que necesito para volver a formatear la estructura de la carpeta, la cual no es posible ya que este software es mantenido y administrado por un Punto de Venta sistema en mi cliente de ladrillo y mortero de tienda.

He aplica SSH y cambiado los permisos en la carpeta que me estoy moviendo de la imagen y la imagen de sí mismo a 777 y emitió el siguiente comando:

mv img.gif product_images/img.gif

y me da el siguiente error:

mv: cannot move 'img.gif' to 'product_images/img.gif': File too large

El archivo no es "demasiado grande"; es sólo el 49 bytes (es un gif de 1 x 1)!

Si trato de arrastre+caída de carga de Windows en el directorio a través de FTP me sale el siguiente error:

An error occurred copying a file to the FTP Server. Make sure you have permission to put files on the server.

Details:
200 TYPE is now 8-bit binary
227 Entering Passive Mode (184,168,167,92,197,60)
553-Can't open that file: File too large
553 Rename/move failure: no such file or directory

Tengo permiso para poner los archivos en el servidor...¿cómo puedo poner el img.gif archivo de allí en primer lugar. El directorio no existe. Puedo ls de su contenido bien.

El anterior tipo de soporte (que ya no está más disponible) podría hacerlo - sólo que no sé cómo.

Cómo se puede ir sobre cómo mover archivos en este muy terco directorio? Alguna idea?

6voto

baraboom Puntos574

Así que, después de googlear godaddy 1024 límite de archivo y la lectura de un par de resultados, parece que la mejor opción podría ser la de encontrar un nuevo huésped.

Aparte de eso, la forma menos dolorosa que se me ocurre para solucionar el problema sería para organizar lógicamente los archivos en los subdirectorios y, a continuación, utilizar Apache reglas de reescritura para asignar las sendas antiguas a las nuevas rutas. Esto ahorraría cambiar nada en la aplicación real. El siguiente sería un ejemplo:

1) Descargar el directorio para el equipo local;

2) Organizar los archivos en sub-directorios, que no debería ser demasiado malo con solo 7000 archivos y el límite de 1024. Por ejemplo, usted podría crear 36 sub directorios, uno para cada letra del alfabeto y una para cada número, del 0 al 9, y a continuación, coloque cada subconjunto de archivos en el subdirectorio apropiado: archivo awhatever.gif iría a un/, archivo 11whatever iría a 1/, etc.

3) Crear / editar .htaccess y crear una regla de reescritura que se asignan a cualquier solicitud de product_images/awhatever.gif a product_images/a/awhatever.gif.

El .htaccess sería algo como esto:

RewriteEngine On
RewriteRule ^(.)([^/]+)$ $1/$1$2 [L]

4voto

JdeBP Puntos17351

GoDaddy ha dicho que no le permita hacer lo que quieres hacer. La GoDaddy páginas de ayuda te diga que lo que quiere hacer no es permitido. Incluso les dicen que usted va a obtener este tipo de mensajes de error si intenta hacer lo que no está permitido hacer. Y aquí estás, preguntando, "¿Cómo, a pesar de que se diga que no puedo por GoDaddy sí, hago esto?".

GoDaddy no permiten hacer esto. Encontrar a alguien que lo hace, o mantener por debajo del 1024 entradas de directorio límite.

1voto

leoinfo Puntos3364

Obtener en torno a la cuestión mediante la creación de un sprite CSS-hoja para las imágenes de los productos. Usted puede reducir el número de archivos de forma exponencial.

1voto

Joel in Gö Puntos3195

Podría ser uno de los trucos que puedes probar, si GoDaddy permite enlaces permanentes:

ln img.gif product_images/img.gif

Concedido, si el mensaje de error es simplemente engañosa (y en realidad es una "demasiados archivos de error", en lugar de un "espacio en disco insuficiente" error), esto probablemente aún no funcionan. Pero si esto sucede, usted tendrá idénticos img.gif's tanto en su directorio original y su subdirectorio, pero el archivo de punteros que apuntan al mismo archivo físico, así que no hay espacio adicional será utilizado (aparte de el puntero).

Si todo va bien, usted puede eliminar el archivo original, y el uno en el subdirectorio que se siguen:

rm img.gif

Si todo lo demás falla, puede descargar todos los archivos de nuevo (sugerencia: tar+gz a descargar mucho más rápido), eliminarlos de la página web, reorganizarlos (más sobre esto más adelante), entonces resubir ellos.

Resolver el problema de root

Una solución común es crear subdirectorio estructuras para los primeros caracteres del nombre de archivo. Por ejemplo:

imágenes/widget001.png --> images/w/i/widget001.png

A continuación, puede escribir una .htaccess RewriteRule para su aplicación web no se rompe. Todavía habrá que probar a descargar la imagen a partir de imágenes/widget001.png, pero la reescritura de URL, el motor de servir imágenes/w/i/widget001.png lugar.

Usted puede crear sin embargo muchos niveles de subdirectorios que usted necesita con el fin de obtener el número de archivos por directorio de abajo. Esto funciona especialmente bien si los archivos se han generado al azar los nombres. Si todos los nombres son similares (por ejemplo, todos ellos coinciden con el formato "img#####.png"), usted puede crear su estructura de directorios basado en alguna otra parte del nombre, en lugar de utilizar las primeras letras.

NOTA: debe tener el nombre de archivo completo para facilitar el mantenimiento en el futuro, en lugar de cambiar el nombre a las imágenes/w/i/dget001.png en el ejemplo anterior. Una razón es que es mucho más fácil de acoplar y reconstruir la estructura de directorios si usted encuentra que usted necesita para profundizar en la estructura de directorios de nuevo más tarde.

EDIT: +1 a baraboom, que también mencionó el subdirectorio+reescritura de URL, mientras yo estaba escribiendo mi respuesta. :)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

;