将文件夹中的所有文件移动到另一个文件夹中?
移动从一个位置的一个文件时,另一个我使用将文件夹中的所有文件移动到另一个文件夹中?
rename('path/filename', 'newpath/filename');
你如何将所有文件的文件夹中到另一个文件夹?想这一个没有结果:
rename('path/*', 'newpath/*');
稍微详细的解决方案:
// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
if (in_array($file, array(".",".."))) continue;
// If we copied this successfully, mark it for deletion
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
}
}
// Delete all successfully-copied files
foreach ($delete as $file) {
unlink($file);
}
尝试: 重命名( '路径/ *', 'NEWPATH /');使用重命名
mkdir('newpath');
rename('path/*', 'newpath/');
没有工作..“没有这样的文件或目录” – ajsie 2010-01-17 18:53:24
有星号如果目标目录不存在,您需要先创建()和一些错误检查:
$srcDir = 'dir1';
$destDir = 'dir2';
if (file_exists($destDir)) {
if (is_dir($destDir)) {
if (is_writable($destDir)) {
if ($handle = opendir($srcDir)) {
while (false !== ($file = readdir($handle))) {
if (is_file($srcDir . '/' . $file)) {
rename($srcDir . '/' . $file, $destDir . '/' . $file);
}
}
closedir($handle);
} else {
echo "$srcDir could not be opened.\n";
}
} else {
echo "$destDir is not writable!\n";
}
} else {
echo "$destDir is not a directory!\n";
}
} else {
echo "$destDir does not exist\n";
}
“没有这样的文件或目录” – Alvin 2011-06-15 21:20:06
如果你有问题,张贴一些代码(或一个新的问题)。 – 2011-06-16 09:42:19
这个答案对我无效。如果重命名函数支持globs,但是从PHP7开始看起来并不是这样,那将会很棒。例如:'rename(/home/eric/wordpress/files/.tmp-checksum/*,/ home/eric/wordpress/files/core):没有这样的文件或目录' 但是,运行'ls/home/eric/wordpress/files/.tmp-checksum/*在bash shell中确实显示很多文件。 – Eric 2017-11-06 03:10:12
另一种:
我没有看到一个点在目的地
于是,我所描述的使用rename()
功能,我一直得到错误背面,有no such file or directory
。我将代码放在if语句中,以确保我确实拥有创建的目录。它是这样的:
$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);
if(is_dir($permanentDir)){
echo $permanentDir . ' is a directory';
if(is_dir($tempDir)){
echo $tempDir . ' is a directory';
}else{
echo $tempDir . ' is not a directory';
}
}else{
echo $permanentDir . ' is not a directory';
}
rename($tempDir . "*", $permanentDir);
所以,当我再次运行代码,它吐出这两个路径是目录。我被难倒了。我和同事聊了一会儿,他建议说:“既然你想移动所有的文件,为什么不把temp目录重命名为新目录呢?”
原来,这是我最终做的。我放弃了尝试使用rename()
函数的通配符,而只是使用rename()
将临时目录重命名为永久性目录。
所以它看起来像这样。
$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);
rename($tempDir, $permanentDir);
这对我的目的非常合适,因为在文件上传和“移动”后,我不需要旧的tmp目录。
希望这会有所帮助。如果有人知道为什么通配符在rename()
函数中不起作用,并且为什么我收到上述错误,请告诉我。
作为一个附注;当您将文件复制到另一个文件夹时,它们上次更改的时间将成为当前时间戳。所以你应该新的文件touch()。
... (some codes for directory looping) ...
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
$filetimestamp = filemtime($source.$file);
touch($destination.$file,$filetimestamp);
}
... (some codes) ...
尝试这一个?:
<?php
$oldfolderpath = "old/folder";
$newfolderpath = "new/folder";
rename($oldfolderpath,$newfolderpath);
?>
不知道这是否可以帮助任何人或没有,但以为我反正发布。有一个挑战,我有一堆电影,我通过各种网上商店购买和下载,所有这些电影都存储在一个文件夹中,但都在自己的子文件夹中,并且都有不同的命名约定。我想将它们全部移到父文件夹中,并将它们全部重命名为漂亮。所有我设法使用批量重命名工具和条件名称格式重命名的子文件夹。子文件夹中有我不想要的其他文件。所以我写了下面的PHP脚本,1.重命名/将所有带扩展名mp4的文件移动到它们的父目录,同时给它们与它们包含的文件夹相同的名称,2.删除子文件夹的内容并查找其中的目录以清空然后rmdir,3. rmdir子文件夹。
$handle = opendir("D:/Movies/");
while ($file = readdir($handle)) {
if ($file != "." && $file != ".." && is_dir($file)) {
$newhandle = opendir("D:/Movies/".$file);
while($newfile = readdir($newhandle)) {
if ($newfile != "." && $newfile != ".." && is_file("D:/Movies/".$file."/".$newfile)) {
$parts = explode(".",$newfile);
if (end($parts) == "mp4") {
if (!file_exists("D:/Movies/".$file.".mp4")) {
rename("D:/Movies/".$file."/".$newfile,"D:/Movies/".$file.".mp4");
}
else {
unlink("D:/Movies/".$file."/".$newfile);
}
}
else { unlink("D:/Movies/".$file."/".$newfile); }
}
else if ($newfile != "." && $newfile != ".." && is_dir("D:/Movies/".$file."/".$newfile)) {
$dirhandle = opendir("D:/Movies/".$file."/".$newfile);
while ($dirfile = readdir($dirhandle)){
if ($dirfile != "." && $dirfile != ".."){
unlink("D:/Movies/".$file."/".$newfile."/".$dirfile);
}
}
rmdir("D:/Movies/".$file."/".$newfile);
}
}
unlink("D:/Movies/".$file);
}
}
请尝试此解决方案,它的试验成功::
<?php $files = scandir("f1"); $oldfolder = "f1/"; $newfolder = "f2/"; foreach($files as $fname) { if($fname != '.' && $fname != '..') { rename($oldfolder.$fname, $newfolder.$fname); } } ?>
你需要保持原来的目录? – Sampson 2010-01-17 18:48:28
这将是很好的保持原来的文件夹...不是这次,但也许另一次我将不得不保留它..我可以怀疑你的方法是=) – ajsie 2010-01-17 18:49:33
但我注意到我的目标文件夹中的文件,我想保持。然后你的方法不起作用,因为它不允许将文件夹移动到已经包含文件的目标文件夹 – ajsie 2010-01-17 18:55:04