0
function copy_directory( $source, $destination ) {
    if ( is_dir( $source ) ) {
        @mkdir( $destination );
        $directory = dir( $source );
        while ( FALSE !== ( $readdirectory = $directory->read() ) ) {
            if ( $readdirectory == '.' || $readdirectory == '..' ) {
                continue;
            }
            $PathDir = $source . '/' . $readdirectory; 
            if ( is_dir( $PathDir ) ) {
                copy_directory( $PathDir, $destination . '/' . $readdirectory );
                continue;
            }
            copy( $PathDir, $destination . '/' . $readdirectory );
        }

        $directory->close();
    }else {
        copy( $source, $destination );
    }
}

これは、ディレクトリとファイル全体を別の宛先にコピーするための私のスクリプトです。しかし、私には小さな問題があります

私のフォルダは次のようなものです:

cinch.v2.1.1\cinch\cinch\other folders and files
loopy.v2.1.3\loopy\loopy\other folders and files
musy.v3.1.4\musy\musy\other folders and files
...

構造全体ではなく、サブフォルダーとファイルを含む最後の (深さ 3) シンチ、ルーピー、ムジー フォルダーのみをコピーする必要があります。スクリプトの変更方法。

コピー構造は次のようになります。

cinch\other folders and files
loopy\other folders and files
musy\other folders and files

私はから始めます

if (strpos($readdirectory, '.') === false && strpos($readdirectory, '_') === false) {   

しかし、これは必要に応じて機能しません。

4

1 に答える 1

1

最初にレベル 3 のディレクトリを探してから、これらを宛先にコピーする必要があります。

function copy_directory(...) {
...
}

function copy_depth_dirs($source, $destination $level)
{
    $dir = dir($source);
    while (($entry = $dir->read()) !== FALSE) {
        if ($entry != '.' && $entry != '..' && is_dir($entry)) {
            if ($level == 0) {
                copy_directory($source . '/' . $entry, $destination);
            } else {
                copy_depth_dirs($source . '/' . $entry, $destination, $level - 1);
            }
        }
    }
}

copy_depth_dirs('cinch.v2.1.1', $destination, 3);
于 2012-11-14T09:28:21.563 に答える