From ebd28b61784be8abf9715f1e5d07d439431e6d17 Mon Sep 17 00:00:00 2001 From: Marius Hoch Date: Wed, 19 Dec 2012 20:29:15 +0100 Subject: [PATCH] Add an option to importImages to search subdirectories recursively Change-Id: I73a0d42884c1006492cd3de912eb1dc6dab08c5e --- maintenance/importImages.inc | 8 ++++++-- maintenance/importImages.php | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/maintenance/importImages.inc b/maintenance/importImages.inc index ac5d14432b..2b3d5514c5 100644 --- a/maintenance/importImages.inc +++ b/maintenance/importImages.inc @@ -28,9 +28,10 @@ * * @param $dir string Path to directory to search * @param $exts Array of extensions to search for + * @param $recurse Bool Search subdirectories recursively * @return mixed Array of filenames on success, or false on failure */ -function findFiles( $dir, $exts ) { +function findFiles( $dir, $exts, $recurse = false ) { if ( is_dir( $dir ) ) { $dhl = opendir( $dir ); if ( $dhl ) { @@ -38,8 +39,11 @@ function findFiles( $dir, $exts ) { while ( ( $file = readdir( $dhl ) ) !== false ) { if ( is_file( $dir . '/' . $file ) ) { list( /* $name */, $ext ) = splitFilename( $dir . '/' . $file ); - if ( array_search( strtolower( $ext ), $exts ) !== false ) + if ( array_search( strtolower( $ext ), $exts ) !== false ) { $files[] = $dir . '/' . $file; + } + } elseif ( $recurse && is_dir( $dir . '/' . $file ) && $file !== '..' && $file !== '.' ) { + $files = array_merge( $files, findFiles( $dir . '/' . $file, $exts, true ) ); } } return $files; diff --git a/maintenance/importImages.php b/maintenance/importImages.php index d94b948576..782f502dec 100644 --- a/maintenance/importImages.php +++ b/maintenance/importImages.php @@ -64,7 +64,7 @@ $extensions = isset( $options['extensions'] ) : $wgFileExtensions; # Search the path provided for candidates for import -$files = findFiles( $dir, $extensions ); +$files = findFiles( $dir, $extensions, isset( $options['search-recursively'] ) ); # Initialise the user for this operation $user = isset( $options['user'] ) @@ -332,6 +332,7 @@ Options: --from= Ignore all files until the one with the given name. Useful for resuming aborted imports. should be the file's canonical database form. --skip-dupes Skip images that were already uploaded under a different name (check SHA1) +--search-recursively Search recursively for files in subdirectories --sleep= Sleep between files. Useful mostly for debugging. --user= Set username of uploader, default 'Maintenance script' --check-userblock Check if the user got blocked during import. -- 2.20.1