O ; no final do comando executado por find a -exec deve ser citado para protegê-lo do shell. O shell o verá como o final do comando find .
Alterar
find /var/production-backup/ -mtime +7 -exec rm -rf {} ;
para
find /var/production-backup/ -mtime +7 -exec rm -rf {} ';'
ou para
find /var/production-backup/ -mtime +7 -exec rm -rf {} \;
ou apenas
find /var/production-backup/ -mtime +7 -delete
se o seu find for compatível.
Observe também que o comando find não faz distinção entre diretórios, arquivos ou outras coisas em /var/production-backup . Se, por exemplo, o diretório /var/production-backup em si não tiver sido modificado em mais de sete dias (porque nenhum arquivo ou diretório foi criado / excluído), toda a hierarquia de arquivos será excluída.
Se você pretende excluir apenas arquivos comuns, use
find /var/production-backup/ -type f -mtime +7 -delete
Relacionados:
Outras notas sobre o seu código:
Se você fizer
TAR=$(which tar)
e depois use
$TAR ...
para criar um arquivo tar , você também pode usar tar diretamente. Não há nenhum benefício em definir TAR para o caminho do tar binário com which , pois isso seria pesquisar o PATH da mesma forma que usar tar diretamente. O mesmo vale para os outros comandos que você armazena em variáveis.
O teste [ '$MKDIR -p "$PRODBACKDIR"' ] deve ser um teste diretamente no status de retorno de mkdir . O utilitário mkdir não produz saída que você possa testar. Você também não precisa testar a existência do diretório antes de usar mkdir -p :
if mkdir -p "$PRODBACKDIR"; then
echo 'Directory Created for site'
fi
Observe também que você está usando {$PRODBACKDIR} , que adicionará { e } ao nome do caminho do diretório. Como é feito em um teste de diretório inútil, nenhum dano foi causado (o teste sempre falhou). Você também não precisa de echo -e aqui.
Você não precisa de {} em torno dos nomes das variáveis nas expansões de variáveis. O único local em que você precisa escrever ${variable} é quando a expansão faz parte de uma sequência em que o caractere imediatamente a seguir é um caractere válido em um nome de variável, como em "${variable}x" . Você do precisa dar o dobro de todas as expansões de variáveis.
A opção --progress para rsync é escrita com dois traços, não um. Além disso, -e ssh é, até onde eu sei, o padrão para rsync desde há muito tempo.
A linha
FILENAME=$(echo $DOC | awk -F '/' '{print $NF}');
poderia ser escrito usando uma substituição de parâmetro padrão como
FILENAME=${DOC##*/}
Você raramente precisa testar contra $? . Por exemplo, em vez de
tar ...
if [ $? -eq 0 ]; then ...
faça
if tar ...; then ...
Considere também usar printf para gerar dados variáveis.
Você está definindo TODAY_DATE como uma string que contém a data de hoje, mas você a usa apenas duas vezes. Há pelo menos três outras invocações de date com um formato ligeiramente diferente ... (também, %Y-%m-%d pode ser substituído por %F , consulte man strftime ).
Você não precisa de ; no final dos comandos que não são imediatamente seguidos por outros comandos na mesma linha. Newline funciona como um terminador de comando.
Etc., ...
Também gostaria de sugerir que você analisasse o software de backup existente. Eu poderia recomendar borgbackup e restic , por exemplo.
Relacionados: