Como excluo pastas em bash após cópia bem -sucedida (Mac OSX)?
-
21-09-2019 - |
Pergunta
Recentemente, criei meu primeiro script bash e estou tendo problemas para aperfeiçoar sua operação. Estou tentando copiar determinadas pastas de uma unidade local, para uma unidade de rede.
Estou tendo o problema de excluir pastas depois de serem copiadas, às vezes a pasta ficava vazia, mas a própria pasta permaneceria, outras vezes nada aconteceria. Existe uma maneira melhor de tentar excluir pastas depois que o RSYNC terminar de copiar? Eu estava tentando excluir a pasta Buffer de TV ao vivo, mas, na verdade, posso explodir sem conseqüências, se necessário.
#!/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
Solução
Provavelmente existem muitas maneiras de fazer isso, mas eu iria com:
rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv" && rm -rf $folderToBeMoved
o &&
A sintaxe significa que apenas faz isso é o comando anterior saindo com sucesso e rm -rf
forçará a remoção de diretórios, mesmo que haja arquivos neles.
Você também pode experimentar a opção RSYNC--REMOVE-SOURCE-FILE, mas acredito que isso o deixará com os diretórios, para que você ainda precisará limpá-los depois.
E, como mencionado no comentário acima, você deseja evitar comandos maiúsculos como Echo, porque isso fará com que as coisas quebrem em muitos lugares.
Para detalhes sobre o status de saída, bem como muitas outras ótimas dicas ao trabalhar com Bash, eu sempre acabo voltando para http://tldp.org/ldp/abs/html/exit-status.html.