0

On my servers, one of the scripts that I have been using keeps creating the blank files at root and I haven't been noticed for more than over 6 months and now total files are created more than 500,000 files.

I cannot access that directory through control panel because there were too many files and I can only access with ftp. Even with ftp, ftp truncated the files by 8000 each. So I have to keep deleting 8000 each.

I tried to ask my host to delete it for me but they says they can't since it's the liability issues.

So what I want to know is how can i delete all of those 500,000 files through ftp? Since it's shared hosting, I don't have SSH access either. Hosting provider says I can request the SSH access but need to verify it and their office closed until next week. So I am stuck with ftp for now.

So please kindly let me know how can i delete massive files via ftp ?

And incase, if i can get the ssh access, please kindly let me know how can i delete the files via ssh with efficient ways ?

Filename are like this

  • closecp.139619
  • closecp.139619.1
  • closecp.139620
  • closecp.139620.1
Bart De Vos
  • 17,761
  • 6
  • 62
  • 81
spotlightsnap
  • 119
  • 1
  • 3
  • 1
    As a recommendation, not by hand. Your best bet is writing a simple script to list the directory incrementally and delete the files till they're all gone. If FTP is limiting you to 8k files at once, deleting them all by hand will take a long time and require interaction. – Smudge Nov 24 '11 at 14:19
  • Thank you so much for your suggestion. Any sample script for me to perform the action ? I would be really appreciated. – spotlightsnap Nov 24 '11 at 14:38
  • possible duplicate of [How can I delete all files from a directory when it reports "Argument list too long"](http://serverfault.com/questions/45245/how-can-i-delete-all-files-from-a-directory-when-it-reports-argument-list-too-l) – user9517 Nov 24 '11 at 14:55
  • @spotlightsnap There's some good sample code on http://uk3.php.net/opendir and http://uk.php.net/unlink. Basic idea, list the directory, preg_match the file names and unlink the ones you want deleted. – Smudge Nov 24 '11 at 14:56
  • @spotlightsnap That only works if you upload the file to the server first, if you want to do it remotely do the same thing but using FTP commands to your remote server (and probably in something like Python or Perl if you don't have PHP locally) – Smudge Nov 24 '11 at 14:58

5 Answers5

2

As sam pointed out I'd put a PHP or Perl file on your webspace which deletes the files from the directory.

Be sure the script cannot be found easily by anyone else but you and ensure the values in it cannot be overwritten via POST or GET.

Dennis Winter
  • 448
  • 2
  • 7
  • 15
1

Its probably going to take a good long while deleting those files, expect high I/O during the time.

Theres lots of useful advise on how to delete lots and lots of files in this article rm-on-a-directory-with-millions-of-files

Yours might not be millions but it will be significantly slow.

Matthew Ife
  • 22,927
  • 2
  • 54
  • 71
1

Finally, I got it with the ftp command lines. I used "cmd" from window.

First i need to turn off the prompt with

prompt

Then delete with the following command

mdelete closecp.*
Bart De Vos
  • 17,761
  • 6
  • 62
  • 81
spotlightsnap
  • 119
  • 1
  • 3
0

You may be in luck and the FTP server allows server-side expanding wildcards.

Ditch your FTP GUI and whip out the shell, connect & login by the command line ftp. Type "del closecp.*" and let it churn away. Oh, it might be useful to disable prompting first (depends what system you're on).

Roman
  • 3,825
  • 3
  • 20
  • 33
  • Hello, thanks for letting me know that i can use with command line. I tried to use ftp command like through cmd. I tried to delete with the wildcard command which is "del closecp.*" but it response as No such file or directory. But if i delete the file like del closecp.169535, it works though. So i think it's the command line issue. Any other command lines that should i try ? – spotlightsnap Nov 25 '11 at 02:05
  • Hmm, you may try mdelete. /edit: Ah, I just saw you found it by yourself. – Roman Nov 25 '11 at 09:53
0

If you can ssh to the box, you can run something like:

find /path/to/files -maxdepth 1 -name "closecp.*" -delete

That will find all the files with names of the form "closecp.*" (as you noted) in the directory /path/to/file (change this to suit your situation). The "-maxdepth 1" option will keep the "find" command from looking into subdirectories, and look only in /path/to/file.

cjc
  • 24,533
  • 2
  • 49
  • 69