2010-03-22 15 views
0

J'ai récemment créé mon premier script bash, et j'ai du mal à le perfectionner. J'essaye de copier certains dossiers d'un disque local, à un lecteur de réseau. Je rencontre 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, d'autres fois rien ne se passerait du tout. Y at-il un meilleur moyen d'essayer de supprimer des dossiers après que rsync ait fini de copier? J'essayais d'exclure le dossier du live tv buffer, mais vraiment, je peux l'emporter sans conséquence si besoin est.Comment supprimer des dossiers dans bash après une copie réussie (Mac OSX)?

#!/bin/bash 

network="CBS" 
useracct="tvcapture" 
thedate=$(date "+%m%d%Y") 
folderToBeMoved="https://stackoverflow.com/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 
+0

Même si OS X prend en charge des commandes majuscules comme ECHO, vous devriez prendre l'habitude d'utiliser les minuscules car aucune autre plate-forme Unix à ma connaissance ne prend en charge les commandes Bash majuscules. –

Répondre

2

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 ce 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 dedans.

Vous pouvez également essayer l'option rsync --remove-source-files, mais je crois que cela vous laissera avec les répertoires, donc vous aurez toujours besoin de les nettoyer par la suite. Et comme mentionné dans le commentaire ci-dessus, vous voulez éviter les commandes UPPERCASE comme ECHO, car cela va provoquer des problèmes dans beaucoup d'endroits.

Pour plus de détails sur le statut de sortie ainsi que plein d'autres bons conseils lorsque je travaille avec bash, je finis toujours par retourner à http://tldp.org/LDP/abs/html/exit-status.html.