2tonejoe Posted October 2, 2008 Share Posted October 2, 2008 i am passing a number through a form and the input will be a range like "234204". I need to try and recursively locate a file named this in a directory called repository: /repository .../200 ......000347872_f.jpg ......000347872_m.jpg ......000347872_v.jpg ......000112949_f.jpg .../201 .../202 .../203 .../204 ......000234204_f.jpg ......000234204_v_f1.jpg .../205 .../206 and then copy the found files to a directory called ready-to-email: /ready-to-email ...000234204_f.jpg ...000234204_v_f1.jpg I know the file names will have different endings, but the center of the files will have the "client id" number. (yes the subfolders are named after the last 3 digits of the client id) I need to copy all files that match the 9 digit client id number. I saw file_exists but am not sure if that will work because i need to move all files that match and i wouldn't know what comes after the client id. i mean . . . i don't have a way of specifying what the full name is and that seems to be the only way to get file_exists to work. I am not too savvy in this and would love some help. thanks in advance to all the readers and submitters of this forum! Link to comment https://forums.phpfreaks.com/topic/126768-find-and-copy-files/ Share on other sites More sharing options...
Daniel0 Posted October 2, 2008 Share Posted October 2, 2008 Try something like this to get you started (I didn't test it): <?php function search($path, $string) { $dir = new DirectoryIterator($path); foreach ($dir as $item) { if ($item->isDir() && !$item->isDot()) { search($item->getRealPath(), $string); } else if ($item->isFile()) { if (strpos($item->getFilename(), $string) !== false) { echo $item->getRealPath() . PHP_EOL; } } } } search('/repository', '234204'); ?> It will search recursively through a directory, $path, and print the path to all the files that contain $string in their filenames. Link to comment https://forums.phpfreaks.com/topic/126768-find-and-copy-files/#findComment-655659 Share on other sites More sharing options...
sh0wtym3 Posted October 2, 2008 Share Posted October 2, 2008 ^ If that doesn't work you might want to try: #!/usr/bin/perl # FTP file search by LudakoT, all rights given away ludakot[at]gmail.com # Searches a filename until it's found or when all directories on the server are viewed # Tested on my local ftp server on winxp and debian use strict; use Net::FTP; use Getopt::Std; my %args; my ($host,$port,$user,$password,$filename); getopts (":h:P:u:H:f:p:d", \%args); if(!defined $args{h} || !defined $args{f}) { usage(); } if(!defined $args{P}) { $port = 21; } else { $port = $args{P}; } if(!defined $args{u}) { $user = 'anonymous'; } else { $user = $args{u}; } if(!defined $args{p}) { $password = 'foo@bar'; } else { $password = $args{p}; } if(defined $args{H}) { usage(); } $host = $args{h}; $filename = $args{f}; my $ftp = Net::FTP->new($host, Port => $port, Debug => 0) or die $@; $ftp->login($user,$password) or die $ftp->message; my @start = $ftp->ls; # See what we have in the root of the ftp server foreach (@start) { if($_ eq $filename) { # Perhaps the file is already here print "File found in: ", $ftp->pwd(),"\n"; if(defined $args{d}) { $ftp->get($filename) or die $ftp->message; } $ftp->quit; exit; # Remove this if you want to search for other files with the same name } search($_); } sub search { my $dir = shift; my $startdir = $ftp->pwd(); # Remember where you came from # In this environment, you can tell the difference between directories and files $ftp->cwd($dir) or next; my @names = $ftp->ls; # List everything we have in this directory foreach my $name (@names) { if($name eq $filename) { # Is our file here? print "File found in: ", $ftp->pwd(),"\n"; if(defined $args{d}) { $ftp->get($filename) or die $ftp->message; } $ftp->quit; exit; # Remove this if you want to search for other files with the same name } search($name); # Search the next possible directory } $ftp->cwd($startdir); # Back where you came from } sub usage { print qq~ Options: -h hostname * -f filename * -u username [default anonymous] -p password [default foo[at]bar] -P portnumber [default 21] -d download file when found -H display help Options marked with '*' are mandatory Example: perl $0 -h 192.168.0.1 -f foo.zip ~; exit; } # TODO: Search with wildcards and question marks #EOF Found it at https://www.elitehackers.info/forums/archive/index.php/t-8159.html, credit goes to "LudakoT". Link to comment https://forums.phpfreaks.com/topic/126768-find-and-copy-files/#findComment-655661 Share on other sites More sharing options...
2tonejoe Posted October 2, 2008 Author Share Posted October 2, 2008 but how do I handle the move? also, none of those seem to handle my in ability to search something like: "search *2349712*" :-\ Link to comment https://forums.phpfreaks.com/topic/126768-find-and-copy-files/#findComment-655781 Share on other sites More sharing options...
Daniel0 Posted October 2, 2008 Share Posted October 2, 2008 You can move things like rename('/path/to/file.txt', '/new/path/to/file.txt'); Link to comment https://forums.phpfreaks.com/topic/126768-find-and-copy-files/#findComment-655798 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.