Como deletar todos os diretórios, exceto os diretórios apontados pelo symlink

1

Eu tenho abaixo da estrutura de diretórios.

drwxr-xr-x 5 ec2-user ec2-user 4096 May 22 07:03 TEEST  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 05:33 BEE-TES  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 10:53 ONE  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 25 09:50 TWO  
lrwxrwxrwx 1 ec2-user ec2-user   28 May 25 09:50 previous -> TWO  
drwxr-xr-x 5 ec2-user ec2-user 4096 Jun  1 11:00 TEMP  
lrwxrwxrwx 1 ec2-user ec2-user   28 Jun  1 11:00 current -> TEMP

Como remover todos os diretórios, exceto aqueles apontados por links simbólicos?

    
por AVJ 02.06.2017 / 14:14

1 resposta

4

{ find . -type l -exec readlink {} \; ; find . -type d -exec basename {} \; ; } | sort | uniq -u | tail -n +2 | xargs rmdir

Em câmera lenta:

  • find . -type l -exec readlink {} \; encontra os links e lista os diretórios correspondentes
  • find . -type d -exec basename {} \; encontra e lista os diretórios
  • a saída dos comandos entre chaves lista todos os diretórios uma vez, exceto aqueles que são o destino de links que aparecem duas vezes
  • sort | uniq -u | tail -n +2 mantém apenas os nomes exclusivos (portanto, os diretórios aos quais não estão vinculados) e remove .
  • xargs rmdir elimina os diretórios. Substitua por rm -r para remover seu conteúdo.
por 02.06.2017 / 15:47