Script para mover arquivos com mais de 5 dias

1

Atualmente, estou trabalhando em um script que me permite mover qualquer arquivo com mais de 5 dias para uma pasta de arquivo com o mesmo caminho, exceto a pasta raiz que é alterada. Então, algo como: root/subdir1/subdir2/file to rootarchive/subdir1/subdir2/file . Deve funcionar recursivamente.

Eu já tentei criar um foreach para todos os arquivos da pasta "root":

#!/bin/bash
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
      mv $file ../rootarchive/"$file"
done

Mas isso não funcionou corretamente, pois o comando mv não encontrou o destino especificado ../rootarchive/"$file" . Alguém tem uma idéia de como eu poderia resolver esse problema?

    
por muru 15.11.2015 / 22:26

1 resposta

6

Você precisa criar a árvore de diretórios de subdir1/subdir2/ - mv não fará isso para você. Você poderia fazer, por exemplo:

find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
    dir="${file%/*}"
    mkdir -p ../rootarchive/"$dir"
    mv "$file" ../rootarchive/"$file"
done

Você pode rsync . Pode recriar a estrutura de diretórios e excluir arquivos copiados:

find . -type f -mtime +5 -print0 | 
  rsync -0avP  --remove-source-files --files-from=- ./ ../rootarchive

Para rsync :

  • -0 indica que as listas de arquivos são separadas por nulo. Isso afeta:
  • --files-from= lê a lista de arquivos a serem copiados (de stdin: - ).
  • -a ativa o modo de arquivamento, que retém as permissões de arquivo, a propriedade, etc.
  • --remove-source-files exclui arquivos que foram copiados com êxito da origem.
  • -vP ativa o modo detalhado e as informações de progresso.
por muru 15.11.2015 / 22:52