Selektives Kopieren unter Linux
In der c’t 3/09 haben Sie ein geniales Copy-Script zum „selektiven Kopieren“ bereitgestellt, das ich bisher ausgiebig genutzt habe. Da ich mir einen sehr einfachen Linux-Server aufgebaut habe, suche ich etwas Ähnliches auch für Linux. Ich arbeite mit der Ubuntu-Distribution. Können Sie mir weiterhelfen?
In der c’t 3/09 haben Sie ein geniales Copy-Script zum „selektiven Kopieren“ bereitgestellt, das ich bisher ausgiebig genutzt habe. Da ich mir einen sehr einfachen Linux-Server aufgebaut habe, suche ich etwas Ähnliches auch für Linux. Ich arbeite mit der Ubuntu-Distribution. Können Sie mir weiterhelfen?
Im Prinzip ist das mit einem Einzeiler getan:
for i in QUELLE/* ; do [ -e "ZIEL/`basename $i`" ] ||
cp "$i" ZIEL/ ; done
QUELLE und ZIEL müssen Sie durch Quell- und Zielverzeichnis ersetzen. Das Skript iteriert über alle Dateien im Quellverzeichnis (for i in QUELLE/*), prüft für jede Datei, ob sie im Zielverzeichnis existiert ([ -e ZIEL/’basename $i’ ]) und führt die Kopieraktion aufgrund der logischen Oder-Verknüpfung (||) nur dann aus, wenn dieser Test fehlschlägt, die Datei also noch nicht im Zielverzeichnis liegt.
Um die doch etwas komplizierte Zeile nicht immer wieder eintippen zu mĂĽssen, machen Sie daraus ein Skript, in dem Sie QUELLE und ZIEL durch Variablen ersetzen, denen man zu Beginn des Skripts die an das Skript ĂĽbergebenen Argumente zuweist:
#!/bin/sh
[ -z $2 ] && echo Aufruf $0 quelle ziel && exit
Q=$1
Z=$2
for i in ${Q}/* ; do [ -e "${Z}/`basename $i`" ] ||
cp "$i" ${Z}/ ; done