函数:
function scandir_recursive($dir) {
$items = scandir($dir);
foreach($items as $item) {
if ($item == '.' || $item == '..') {
continue;
}
$file = $dir . '/' . $item;
echo "$file<br />";
if (is_dir($file)) {
scandir_recursive($file);
}
}
}
scandir_recursive($path);
输出:
EEAOC/EN/1001/data
EEAOC/EN/1001/data/New Text Document.txt
EEAOC/EN/1001/data/troll.txt
EEAOC/EN/1002/data
EEAOC/EN/1002/data/New Text Document.txt
EEAOC/EN/1002/data/troll.txt
EEAOC/EN/1003/data
EEAOC/EN/1003/data/New Text Document.txt
EEAOC/EN/1003/data/troll.txt
EEAOC/EN/1004/data
EEAOC/EN/1004/data/New Text Document.txt
EEAOC/EN/1004/data/troll.txt
是否可以删除这些空目录并保留文件?此类删除EEAOC/EN/1001/data &EEAOC/EN/1002/data& EEAOC/EN/1003/data &EEAOC/EN/1004/data
我想继续保持如何?
如函数输出所示,目录不为空。
我想数据价值低,只需要备份。我假设您从选择斜杠而不是反斜杠来运行 Linux。 自然,目录会产生带有元数据的链接或索引节点,在 linux 中可以通过
df -hi
文件的 Inode-Id 可以通过 ls
的 -i 标志显示
ls -i filename
ls -iltr
ls -ltri `echo $HOME`
索引节点占用空间,并在文件系统操作中引入开销。删除目录的动机就这么多。
PHP 删除目录的rmdir
函数需要The directory must be empty, and the relevant permissions must permit this
.它也是非递归的。
- 方法 1:平展文件名并将文件移动到备份目录,然后删除空目录
- 方法 2:以增量方式存档并删除目录
#Approach 1
您的选择应取决于文件访问的难易程度和频率。
函数 scandir_recursive($dir) { $items = 斯堪迪尔($dir);
foreach($items as $item) {
if ($item == '.' || $item == '..') {
continue;
}
$file = $dir . '/' . $item;
$fnameflat = $dir . '_' . $item;
echo "$file<br />n";
if (is_dir($file)) {
scandir_recursive($file);
}
if(is_file($file)){
rename($file, '~/backup/'.$fnameflat);
}
}
} scandir_recursive($path);
之后使用SeniorDev的此功能取消链接文件和目录,或运行
`exec("rmdir -rf $path")`
不建议这样做。
#Approach 2
使用 exec("tar -cvzf backup".date().".tar.gz $path");
或 php 存档目录。
然后删除目录,如 #1 中所述。