seeseekey.net - Invictus Deus Ex Machina

Wer versucht Dateien, eines bestimmten Dateityps, an einen anderen Ort zu kopieren, der kann mit den grafischen macOS-Boardmitteln schnell auf Probleme stoßen. Als Alternative bietet sich das Terminal an, in welchem das Problem wesentlich schneller gelöst werden kann:

find /Users/seeseekey/Unsortiert/ -iname \*.txt -exec cp {} /Users/seeseekey/Sortiert/txt/ \;

Damit werden alle Dateien, welche dem Pattern entsprechen, im Quellordner gefunden und anschließend in den Zielordner kopiert. Das cp-Kommando zum Kopieren kann auch durch mv ersetzten werden:

find /Users/seeseekey/Unsortiert/ -iname \*.txt -exec mv {} /Users/seeseekey/Sortiert/txt/ \;

Durch diese Änderung werden alle Dateien verschoben anstatt kopiert.

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.

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

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.