Domanda

Recentemente ho creato il mio primo script bash, e sto avendo problemi di perfezionare suo funzionamento. Sto provando a copiare alcune cartelle da un disco locale, su un'unità di rete.

io sto avendo il problema della eliminazione delle cartelle, una volta che vengono copiati, a volte la cartella sarebbe vuoto di contenuti, ma la cartella stessa rimarrebbe, altre volte non sarebbe successo niente affatto. C'è un modo migliore per cercare di eliminare le cartelle dopo rsync è fatto la copia? Stavo cercando di escludere la cartella di buffer diretta tv, ma in realtà, posso soffiare via senza conseguenze in caso di necessità.

#!/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
È stato utile?

Soluzione

Probabilmente ci sono un sacco di modi per farlo, ma vorrei andare con:

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

La sintassi && significa solo fare questo è il comando precedente è uscito con successo, e rm -rf forzerà la rimozione di directory, anche se ci sono file in esse.

Si potrebbe anche provare l'opzione rsync --remove-source-files, ma credo che vi lascerà con le directory, quindi avrai ancora bisogno di pulirli in seguito.

E come accennato nel commento di cui sopra, si vuole evitare di comandi MAIUSCOLE come eco, perché causerà cose da rompere in un sacco di posti.

Per i dettagli sulla stato di uscita così come un sacco di altri grandi suggerimenti quando si lavora con bash, finisco sempre per tornare a http://tldp.org/LDP/abs/html/exit-status.html .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top