Question

J'ai récemment créé mon premier script bash, et je rencontre des problèmes à perfectionner son fonctionnement. Je suis en train de copier certains dossiers d'un lecteur local, à un lecteur réseau.

J'ai le problème de la suppression des dossiers une fois qu'ils sont copiés, parfois le dossier serait vide de contenu, mais le dossier lui-même resterait, rien d'autre fois se produira jamais. Y at-il une meilleure façon d'essayer de supprimer des dossiers après rsync est fait la copie? Je tentais d'exclure le dossier tampon de télévision en direct, mais vraiment, je soufflé dessus sans conséquence si nécessaire.

#!/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
Était-ce utile?

La solution

Il y a probablement beaucoup de façons de le faire, mais je voudrais aller avec:

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

La syntaxe && signifie que faire est la commande précédente est sorti avec succès, et rm -rf va forcer la suppression des répertoires, même s'il y a des fichiers en eux.

Vous pouvez également essayer l'option rsync remove-source-fichiers, mais je crois que vous laissera les répertoires, de sorte que vous aurez toujours besoin de les nettoyer par la suite.

Et comme mentionné dans le commentaire ci-dessus, vous voulez éviter les commandes MAJUSCULES comme ECHO, car il provoque des choses à briser dans beaucoup d'endroits.

Pour plus de détails sur l'état de sortie, ainsi que beaucoup d'autres grands conseils lorsque vous travaillez avec bash, je finis toujours par revenir à http://tldp.org/LDP/abs/html/exit-status.html .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top