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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top