Como removo todos os arquivos de um certo diretório, exceto um diretório filho desse diretório?

1

Estou usando o shell bash. Eu tenho este comando para excluir todos os arquivos JAR dentro de um diretório particular

find ~/.jenkins/jobs/subco/ -name '*.jar' -print0 | xargs -0 -r rm

No entanto, quero modificar o acima para que ele exclua todos os arquivos JAR, exceto aqueles dentro de “~ / .jenkins / jobs / subco / myapp”. Como modifico o comando acima para excluir a remoção de arquivos JAR desse diretório específico durante a remoção de todos os outros?

    
por Dave 04.05.2016 / 18:56

2 respostas

2

Use a opção -prune para pular esse diretório

find ~/.jenkins/jobs/subco -path ~/.jenkins/jobs/subco/myapp -prune -o -name '*.jar' -exec rm -r {} +
    
por 04.05.2016 / 19:16
1

Tente:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -print0 | ...
)

Adicionando -type f para restringir a condição, desde quando você deseja corresponder apenas aos arquivos JAR. Além disso, você usou -print0 , é provável que seu find suporte -delete , para que você possa usar:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -delete
)

POSIXly:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -exec rm -f {} +
)

Com o GNU find, você pode usar -execdir para evitar -exec race condition , veja também algumas considerações de segurança no GNU encontrar manual .

Você sempre deve usar -delete quando estiver disponível.

    
por 04.05.2016 / 19:22