重命名不同子目录中的所有文件
Renaming all files within different sub directories
我正在尝试将目录中的文件重命名为小写,但我遇到的问题是能够扫描文件的子目录。
所以在这种情况下 $app_dir
是主目录,我需要更改的文件存在于多个子文件夹中。
到目前为止,这是我的代码:
$files = scandir($app_dir);
foreach($files as $key=>$name){
$oldName = $name;
$newName = strtolower($name);
rename("$app_dir/$oldName","$app_dir/$newName");
}
感谢您的帮助。
你可以用递归函数来做到这一点。
function renameFiles($dir){
$files = scandir($dir);
foreach($files as $key=>$name){
if($name == '..' || $name == '.') continue;
if(is_dir("$dir/$name"))
renameFiles("$dir/$name");
else{
$oldName = $name;
$newName = strtolower($name);
rename("$dir/$oldName", "$dir/$newName");
}
}
}
这基本上循环遍历一个目录,如果某物是一个文件,它会重命名它,如果某物是一个目录,它会在该目录上自行运行。
如果您尝试将所有文件名小写,您可以试试这个:
使用这个文件系统:
Josh@laptop:~$ find josh
josh
josh/A
josh/B
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t
代码:
<?php
$app_dir = 'josh';
$dir = new RecursiveDirectoryIterator($app_dir, FilesystemIterator::SKIP_DOTS);
$iter = new RecursiveIteratorIterator($dir);
foreach ($iter as $file) {
if ($file != strtolower($file)) {
rename($file, strtolower($file));
}
}
结果:
Josh@laptop:~$ find josh
josh
josh/a
josh/b
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t
此代码不考虑目录中的大写字母,但这取决于您。
像那样尝试
public function renameFiles($dir)
{
$files = scandir($dir);
foreach ($files as $key => $name) {
if (is_dir("$dir/$name")) {
if ($name == '.' || $name == '..') {
continue;
}
$this->renameFiles("$dir/$name");
} else {
$oldName = $name;
$newName = strtoupper($name);
rename("$dir/$oldName", "$dir/$newName");
}
}
}
我正在尝试将目录中的文件重命名为小写,但我遇到的问题是能够扫描文件的子目录。
所以在这种情况下 $app_dir
是主目录,我需要更改的文件存在于多个子文件夹中。
到目前为止,这是我的代码:
$files = scandir($app_dir);
foreach($files as $key=>$name){
$oldName = $name;
$newName = strtolower($name);
rename("$app_dir/$oldName","$app_dir/$newName");
}
感谢您的帮助。
你可以用递归函数来做到这一点。
function renameFiles($dir){
$files = scandir($dir);
foreach($files as $key=>$name){
if($name == '..' || $name == '.') continue;
if(is_dir("$dir/$name"))
renameFiles("$dir/$name");
else{
$oldName = $name;
$newName = strtolower($name);
rename("$dir/$oldName", "$dir/$newName");
}
}
}
这基本上循环遍历一个目录,如果某物是一个文件,它会重命名它,如果某物是一个目录,它会在该目录上自行运行。
如果您尝试将所有文件名小写,您可以试试这个:
使用这个文件系统:
Josh@laptop:~$ find josh
josh
josh/A
josh/B
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t
代码:
<?php
$app_dir = 'josh';
$dir = new RecursiveDirectoryIterator($app_dir, FilesystemIterator::SKIP_DOTS);
$iter = new RecursiveIteratorIterator($dir);
foreach ($iter as $file) {
if ($file != strtolower($file)) {
rename($file, strtolower($file));
}
}
结果:
Josh@laptop:~$ find josh
josh
josh/a
josh/b
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t
此代码不考虑目录中的大写字母,但这取决于您。
像那样尝试
public function renameFiles($dir)
{
$files = scandir($dir);
foreach ($files as $key => $name) {
if (is_dir("$dir/$name")) {
if ($name == '.' || $name == '..') {
continue;
}
$this->renameFiles("$dir/$name");
} else {
$oldName = $name;
$newName = strtoupper($name);
rename("$dir/$oldName", "$dir/$newName");
}
}
}