Dateien in PHP rekursiv ermitteln

In PHP gibt es (nach meinem Wissen) keine einfache Methode um die Dateien eines Ordner rekursiv zu ermitteln. Möchte man die Dateien eines Ordners ohne dessen Unterordner ermitteln, so kann man scandir nutzen. Auf Basis dessen, habe ich eine Funktion geschrieben, welche diesen Operation auf Wunsch auch rekursiv ausführt:

function GetFiles($directory, $recursiv)
{	
	if($directory[strlen($directory)-1]!='/') $directory.="/";
	
	$files = array();
	$subDirectories = array();
	
	$scandirFiles = scandir($directory); //Read files

	foreach ($scandirFiles as $file) 
	{
		if($file=="." || $file=="..") continue;

		if(is_dir($directory.$file))
		{
			array_push($subDirectories, $directory.$file);
		}
		else if(is_file($directory.$file))
		{
			array_push($files, $directory.$file);
		}
	}

	 if($recursiv)
	 {
		 foreach ($subDirectories as $dirs) 
		 {
			 $subDirectoryFiles=GetFiles($dirs, $recursiv);
			 $files = array_merge($files, $subDirectoryFiles);
		 }
	 }
	 
	 return $files;
}

Genutzt wird die Funktion wie folgt:

$files = GetFiles('images/', true);

Der Rückgabewert ist ein Array, in welchem die Dateien mit ihren relativen Pfaden enthalten sind.

Größere Dateien unter Linux finden

Möchte man unter Linux auf der Konsole nach Dateien suchen welche eine bestimmte Größe überschreiten, so kann man folgende Kommandozeile nutzen:

ls -lahS $(find / -type f -size +20000k)

Damit werden alle Dateien mit einer Größe von mindestens 20 Megabyte angezeigt. Die Ausgabe sieht in etwa so aus:

-rw------- 1 postgrey postgrey  10M Feb  1 18:22 /var/lib/postgrey/log.1000000002
-rw-r--r-- 1 root     root     9,9M Jul 13  2014 /usr/lib/locale/locale-archive

Cronjob-Ausgabe in eine Datei umleiten

Manchmal möchte die Ausgabe eines Cronjobs in eine Datei umleiten. Dazu sollte man im ersten Schritt die Crontab-Datei mittels:

crontab -e

öffnen. Die entsprechende Datei sieht dabei in etwa so aus:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
00 14    * * *   /home/test/test.sh

Möchte man nun die Ausgabe umleiten, so geschieht das indem man den Cronjob wie folgt ändert:

00 14    * * *   /home/test/test.sh > /home/test/test.log 2>&1

Das 2>&1 am Ende sorgt dafür das nicht nur die Standardausgabe in der Datei landet, sondern auch die Ausgaben welche sonst in der Fehlerkonsole landen würde.