bash - mantendo os diretórios mais recentes da versão

1

Eu tenho a seguinte hierarquia de como meus aplicativos Python são armazenados:

PyCharmProjects/app/versions/v1
PyCharmProjects/app/versions/v2
PyCharmProjects/app/versions/v3
PyCharmProjects/app/versions/v4
PyCharmProjects/app/versions/v5
PyCharmProjects/app/versions/v6

Como posso escrever um script bash para remover todos os diretórios que não correspondem às duas versões mais recentes e têm mais de 7 dias?

Como eu quero remover v4, v3, v2 e v1 também desde que foi criado há 9 dias.

É possível fazer isso usando regex?

Existe também alguma maneira de fazer isso dentro do próprio PyCharm?

    
por walksignison 18.08.2018 / 17:17

2 respostas

1

Also is there any way to do this within PyCharm itself?

Supondo que os diretórios representam diferentes versões do programa em que você está trabalhando, a maneira padrão e eficiente de lidar com isso é usando um sistema de controle de versão, como Git .

Uma vez configurado o Git, mudar para uma nova versão deve ser tão fácil quanto digitar algo como

$ git add .
$ git commit -m 'Commit message, e.g. "Rewrote the FooBar class, added logging."'
$ git push

Esta sequência será equivalente a copiar o seu projeto em um novo diretório, exceto por ser muito mais eficiente em termos de espaço e não precisar de exclusão nunca.

Você sempre poderá reverter para qualquer versão anterior, se necessário, com um simples comando git checkout COMMIT_ID .

O Pycharm integrou o suporte ao Git, consulte as informações detalhadas aqui e < href="https://confluence.jetbrains.com/display/PYH/Sharing+via+a+repository+repository"> aqui . No entanto, você também pode usar a ferramenta de linha de comando padrão.

    
por 19.08.2018 / 05:09
0

Podemos excluir o caminho no comando find usando ! -path conforme abaixo. que excluirá o diretório v5 ao encontrar.

find directory/* ! -path directory/v5 

Para excluir vários diretórios, repita o mesmo ! -path novamente no comando find, conforme abaixo. que excluirá tanto v4 quanto v5 na descoberta.

find directory/* ! -path directory/v4 ! -path directory/v5 

Em seu cenário, não sabemos o nome da pasta a ser excluída. Assim, podemos implementar outro comando find no lugar do diretório exclude.

O código abaixo mostra a última pasta.

find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n1 | awk '{print $2}'
  • -printf '%T@ %P\n' listará as pastas com registro de data e hora
  • sort -nr fará a classificação inversa, para que a pasta mais recente esteja no topo.
  • head -n1 extrairá a pasta mais recente

E para a segunda pasta mais recente.

find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'
  • head -n2 vai te dar as últimas duas pastas.
  • tail -n1 vai te dar a segunda pasta mais recente.

Implemente os dois códigos acima em vez de v4 e v5, respectivamente.

 find PyCharmProjects/app/versions/* -maxdepth 1 ! -path PyCharmProjects/app/versions/'find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'' ! -path PyCharmProjects/app/versions/'find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions  -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'' -type d -mtime +7 -delete
  • ! -path para excluir o caminho
  • -type -d para encontrar diretórios
  • -maxdepth 1 no diretório atual
  • -mtime +7 diretórios modificados há 7 dias.
  • -delete exclui os diretórios encontrados.
por 18.08.2018 / 18:00