Fazendo backup de diretórios antigos com um script bash

3

Estou escrevendo um pequeno script bash para arquivar diretórios em um formato compactado para outro local quando eles tiverem mais de uma certa idade e tiverem alguma dificuldade. Veja o que estou fazendo.

#!/bin/bash
# Archives completed CDP episodes to compressed storage. Will eventually expand to put these off-site as well.

InputDir="/home/wgant/stuff/"
OutputDir="/home/wgant/archived/"

find $InputDir$ -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir${} \;

Eu sou um pouco verde no bash, então estou indo devagar. Para o primeiro passo, eu só quero despejar uma lista do que os arquivos de saída seriam chamados. No entanto, quando eu corro o acima, os nomes de arquivos estão certos, mas o caminho completo está sendo claramente concatenado, o que eu não quero. Como faço para retirar o nome do arquivo?

Obviamente, quando isso funcionar, eu colocarei as chamadas para criar os tarballs e excluir o diretório em questão.

    
por Will Gant 26.12.2016 / 21:27

1 resposta

3

A sintaxe não está certa, é melhor:

find $InputDir -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir{} \;

Para remover a parte do prefixo dos caminhos, uma maneira fácil será cd no diretório antes de executar o find , assim:

InputDir="/home/wgant/stuff"
OutputDir="/home/wgant/archived"

(cd "$InputDir"; find . -maxdepth 0 -mtime +1 -type d -exec echo "$OutputDir"/{} \;)

Observe que coloquei o último comando em um (...) . Isso é um subshell, o propósito é que o comando cd só é efetivo dentro dele, o restante do script não será afetado por ele. Isso é importante, porque alterar o diretório de trabalho com cd não é recomendado no script. Quebra-lo dentro de (...) torna isso seguro.

    
por 26.12.2016 / 21:33

Tags