Frage

Ich habe kürzlich mein erstes Bash -Skript erstellt und habe Probleme, die Operation zu perfektionieren. Ich versuche, bestimmte Ordner von einem lokalen Laufwerk zu einem Netzwerklaufwerk zu kopieren.

Ich habe das Problem, Ordner zu löschen, sobald sie kopiert wurden, manchmal würde der Ordner inhaltlich leer sein, aber der Ordner selbst würde bleiben, manchmal würde überhaupt nichts passieren. Gibt es einen besseren Weg, um zu versuchen, Ordner nach dem Kopieren von RSYNC zu löschen? Ich habe versucht, den Live -TV -Pufferordner auszuschließen, aber ich kann ihn bei Bedarf ohne Konsequenz wegblasen.

#!/bin/bash

network="CBS"
useracct="tvcapture"
thedate=$(date "+%m%d%Y")
folderToBeMoved="/users/$useracct/Documents"
newfoldername="/Volumes/Media/TV/$network/$thedate"

ECHO "Network is $network"
ECHO "date is $thedate"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"

mkdir $newfoldername
rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv"

# this fails when there is more than one *.eyetv folder
if [ -d $newfoldername/*.eyetv ]; 
then 
#this deletes the contents of the directories
find $folderToBeMoved/"EyeTV Archive"/*.eyetv \( ! -path $folderToBeMoved/"EyeTV Archive"/"Live TV Buffer.eyetv" \) -delete
#remove empty directory
find $folderToBeMoved/"EyeTV Archive"/*.eyetv -type d -exec rmdir {} \;
fi
War es hilfreich?

Lösung

Es gibt wahrscheinlich viele Möglichkeiten, dies zu tun, aber ich würde mit:

rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv" && rm -rf $folderToBeMoved

Das && Syntax bedeutet nur, dass dies der vorherige Befehl erfolgreich beendet ist, und rm -rf Erzwingt die Entfernung von Verzeichnissen, auch wenn sie Dateien enthalten.

Sie können auch die RSYNC-Option ausprobieren-Remove-Source-Files, aber ich glaube, das wird Sie mit den Verzeichnissen hinterlassen, sodass Sie sie danach immer noch aufräumen müssen.

Und wie im obigen Kommentar erwähnt, möchten Sie Großbuchstaben wie Echo vermeiden, weil dies dazu führt, dass die Dinge an vielen Orten brechen.

Für Einzelheiten zum Exit -Status sowie viele andere großartige Tipps bei der Arbeit mit Bash bin ich immer zurück http://tldp.org/ldp/abs/html/exit-status.html.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top