Перемещение файла в каталог с более чем 7000 файлов

2688
David Murdoch

Я работаю на сервере Linux с общим хостингом GoDaddy («безлимитный» хостинг).

У меня есть папка с изображениями продуктов для интернет-магазина, которая содержит более 7000 изображений.

GoDaddy сказал мне, что мне не разрешено иметь более 1024 файлов в одном каталоге, и мне нужно переформатировать структуру папок, что невозможно, поскольку это программное обеспечение обслуживается и запускается системой Point-of-Sale у моего клиента. магазин кирпича и раствора.

Я ввел SSH и изменил права доступа к папке, в которую перемещаю изображение, а само изображение к 777 и выполнил следующую команду:

mv img.gif product_images/img.gif 

и я получаю следующую ошибку:

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

Файл не "слишком большой"; это только 49 байтов (это 1x1 GIF)!

Если я пытаюсь перетащить + падение загрузки из Windows в каталог через FTP, я получаю следующие ошибки:

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 

У меня действительно есть разрешение помещать файлы на сервер ... это то, как я помещаю туда файл img.gif. Каталог существует. Я могу lsего содержание просто отлично.

Предыдущий парень поддержки (которого больше нет в наличии) мог это сделать - я просто не знаю как.

Как я могу перемещать файлы в этот очень упрямый каталог? Есть идеи?

6
Вам не кажется странным, что GoDaddy сказал вам реструктурировать ваши каталоги, и теперь вы не можете добавлять файлы в папку? Удалите ~ 6500 изображений и повторите попытку, либо обратитесь в службу технической поддержки GoDaddy. Joe Internet 12 лет назад 1
Можете ли вы загрузить какие-либо файлы в другой каталог или каталог, который не находится внутри каталога с 7000 файлами? baraboom 12 лет назад 0
@Joe Internet: техническая поддержка GoDaddy - это то, с кем я говорил; он сказал, что они могут «заархивировать» папку, чтобы я мог скачать файлы и реструктурировать каталог. И, как я сказал в вопросе, это не вариант; Программное обеспечение, которое использует эти образы, поддерживается и запускается системой POS. David Murdoch 12 лет назад 0
@baraboom, да, отлично работает. Я загрузил несколько больших изображений, чтобы проверить это, так что это не проблема дискового пространства. : - / David Murdoch 12 лет назад 0

4 ответа на вопрос

6
baraboom

So, after googling godaddy 1024 file limit and reading a few results, it seems like your best option might be to find a new host.

Barring that, the least painful way I can think of to fix the problem would be to logically organize the files into subdirectories and then use Apache's rewrite rules to map the old paths to the new paths. This would save you changing anything in the actual application. The following would be one example:

1) Download the directory to your local computer;

2) Organize the files into sub-directories, it shouldn't be too bad with only 7000 files and the 1024 limit. For example, you could create 36 sub directories, one for each letter of the alphabet and one for each number, 0-9, and then place each subset of files into the appropriate subdirectory: file awhatever.gif would go into a/, file 11whatever would go into 1/, etc.

3) Create / edit the .htaccess file and create a rewrite rule that would map any request for product_images/awhatever.gif to product_images/a/awhatever.gif.

The .htaccess file would look something like this:

RewriteEngine On RewriteRule ^(.)([^/]+)$ $1/$1$2 [L] 
Это удивительная идея. Я делаю это сейчас. David Murdoch 12 лет назад 0
4
JdeBP

GoDaddy has directly told you that it doesn't allow what you want to do. The GoDaddy help pages tell you that what you want to do is not allowed. They even tell you that you'll get these sorts of error messages if you try to do what you are not allowed to do. And here you are, asking, "How, despite being told that I cannot by GoDaddy itself, do I do this?".

GoDaddy does not allow you to do this. Find someone else who does, or keep below the 1024 directory entries limit.

Спасибо, этот ответ - скорее комментарий, чем ответ на вопрос. Мы * рассматриваем возможность переноса сайта на выделенный сервер из-за этого ограничения. Но пока мне нужно переместить еще 7 изображений в эту папку. David Murdoch 12 лет назад 0
@jdeBP, так как же 7000 изображений попали туда в первую очередь? Moab 12 лет назад 0
Кроме того, http://help.godaddy.com./topic/306/article/4261 не утверждает, что это запрещено, просто я могу получить сообщение об ошибке «Недостаточно места на диске». Я знаю, что это всего лишь техническая часть, но в статье говорится, что это «проблема» - проблема, которую смог обойти предыдущий сотрудник службы поддержки. David Murdoch 12 лет назад 0
Насколько ясно, что _каталоги вашей учетной записи на виртуальном хостинге ** могут содержать до 1024 файлов ** ._ для вас, чтобы перестать пытаться утверждать, что GoDaddy не говорит вам то, что явно _с_ говорит вам, как на своем WWW-сайте, так и на своем WWW-сайте. когда ты говорил с этим? Люди, которые управляют серверами, сказали вам, что они не позволят вам делать. Перестаньте думать, что если бы вы только немного поспорили и еще раз спросили мир, ответ волшебным образом изменится. Вы заявляете, что вам нужно иметь невозможное и что вы больше ничего не примете. JdeBP 12 лет назад 0
Провел некоторые исследования, похоже, что их применение выполняется вручную, а не автоматически - возможно, они недавно установили этот предел для каталога вручную, поэтому у предыдущего сотрудника службы поддержки не возникло никаких проблем. Похоже, ваш лучший выбор - найти нового хозяина! baraboom 12 лет назад 0
@JdeBP, сварливый много? Дело в том, что в этом каталоге содержится более 1024 файлов; так что "* может содержать до 1024 файлов *", не правда ли? Предыдущий парень поддержки делал это довольно часто. Так что я знаю, что это / было возможно («было» согласно исследованию @ baraboom). David Murdoch 12 лет назад 0
Моав, один из способов получения файлов там - это тот же способ, которым они попали туда для людей, которые сделали это несколько лет назад: они были на месте до того, как возникло ограничение. Также обратите внимание, что GoDaddy довольно четко заявляет, что он может и будет делать такие вещи, как повторное размещение (или прямое стирание) хранилища людей, которые превышают пределы, поэтому вполне вероятно, что это предел, который после превышения отключает переключатель как это было. JdeBP 12 лет назад 0
@baraboom Спасибо! Можете ли вы указать мне на некоторые исследования и / или открыть свой собственный ответ? David Murdoch 12 лет назад 0
@JseBP, это очень правдоподобно. Спасибо. David Murdoch 12 лет назад 0
М-р Мердок, пока вы по глупости заняты попыткой накапливать эмоции с нуля доказательств, на вашем клиенте работают часы. Вам совершенно однозначно сказали, что вы не можете сделать. Вы можете продолжить с этими глупыми аргументами, что черный - это белый, или вы можете делать то, что ваша хостинговая компания недвусмысленно сказала вам, что вы должны сделать, чтобы компания не сделала это за вас. В этом письме говорится: «Если это не будет выполнено, мы должны привести эти каталоги в соответствие с вашими требованиями». Так что выбирайте: больше черного - это белый аргумент, или сохранение учетной записи GoDaddy вашего клиента? JdeBP 12 лет назад 0
@JdeBP, мы можем пообщаться: http://chat.stackexchange.com/rooms/542/discussion-on-su-question-294535 David Murdoch 12 лет назад 0
1
Stefan Kendall

Get around the issue by creating a CSS sprite-sheet for the product images. You'll reduce your number of files exponentially.

Хорошая идея, но в базе данных POS есть более 11 000 активных продуктов (и не у всех есть изображения). Таким образом, это все еще не обходит проблему. David Murdoch 12 лет назад 1
1
rob

There might be one trick you can try, if GoDaddy allows hardlinks:

ln img.gif product_images/img.gif 

Granted, if the error message is simply misleading (and it's actually a "too many files" error, rather than an "out of disk space" error), this probably still won't work. But if this succeeds, you will have identical img.gif's both in your original directory and your subdirectory, but the file pointers will point to the same physical file, so no additional space will be used (aside from the pointer).

If all goes well, you can safely delete the original file, and the one in the subdirectory will remain:

rm img.gif 

If all else fails, download all the files again (hint: tar+gz them to download them much faster), delete them from the website, reorganize them (more on that below), then reupload them.

Solving the root problem

One common solution is to create subdirectory structures for the first few characters in the filename. For example:

images/widget001.png --> images/w/i/widget001.png

You can then write a .htaccess RewriteRule so your web app doesn't break. It will still try to download the image from images/widget001.png, but the URL rewriting engine will serve up images/w/i/widget001.png instead.

You can create however many levels of subdirectories you need in order to get the number of files per directory down. This works especially well if the files have randomly-generated names. If all the names are similar (e.g., they all match the format "img#####.png"), you can create your directory structure based on some other part of the name, instead of using the first few letters.

NOTE: You should keep the full filename for easier future maintenance, rather than renaming it to images/w/i/dget001.png in the previous example. One reason is that it's much easier to flatten and rebuild the directory structure if you find out you need to deepen the directory structure again later.

EDIT: +1 to baraboom, who also mentioned the subdirectory+URL rewrite while I was writing my answer. :)

Похожие вопросы