Mover arquivos de versões antigas para outra pasta por meio de um script [closed]

1

Estou tentando encontrar uma maneira de fazer com que meu script cmd examine minha pasta, localize as versões mais antigas dos documentos em pdf na pasta e mova-os para outra pasta chamada versões antigas.

Problema que estou tendo é o nome do arquivo alterado com a versão. IE DE-321-DLS-R04.pdf tornou-se DE-321-DLS-R05.pdf

Não sei por onde começar. Eu vi scripts que usam a data, mas nomes de arquivos são diferentes.

Por favor ajude.

    
por Simon 15.08.2013 / 08:49

2 respostas

2

Talvez algo assim:

find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' | xargs mv -t "older versions"

Explicação:

  • find . -name 'DE-321-DLS-R*.pdf' lista todos os arquivos PDF no diretório atual que começam com DE-321-DLS-R .

  • sort -r classifica a lista de arquivos na ordem inversa .

  • sed '1 d' exibe todas as linhas de entrada, exceto a primeira.

  • xargs mv -t "older versions" chama mv com a saída do comando sed anterior como argumentos e informa mv para mover todos os argumentos para o diretório older versions .

Exemplo:

$ ls -1
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
DE-321-DLS-R05.pdf
$ mkdir "older versions"
$ find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' |
xargs mv -t "older versions"
$ ls -1
DE-321-DLS-R05.pdf
older versions
$ ls -1 "older versions"
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
    
por 15.08.2013 / 10:03
0

Gere alguns documentos para teste:

$ mkdir temp
$ cd temp
$ touch aaa-R00.pdf  aaa-R01.pdf aaa-R02.pdf  bbb-R19.pdf bbb-R20.pdf
$ ls | sort -r

bbb-R20.pdf
bbb-R19.pdf
aaa-R02.pdf
aaa-R01.pdf
aaa-R00.pdf

Olha! bbb-R20.pdf e aaa-R02.pdf são as versões mais recentes, outras devem ser movidas.

Copie e cole este script no seu terminal, que marca o documento desatualizado como 'outdate'

for doc in $(ls | grep 'R[0-9][0-9].pdf$' | sort -r); do
  name=${doc%%[0-9][0-9].pdf}

  if [[ "$name" != "$last" ]]; then
    echo $doc latest
  else
    echo $doc outdate
  fi
  last=$name
done

resultado:

bbb-R20.pdf latest
bbb-R19.pdf outdate
aaa-R02.pdf latest
aaa-R01.pdf outdate
aaa-R00.pdf outdate

Para sua pergunta, você pode substituir "echo $ doc outdate" por "caminho mv $ doc / to / outdate /"

    
por 15.08.2013 / 14:40