Como listar diretórios que não estão sendo vinculados simbolicamente em um diretório?

2

Estou tentando fazer alguma limpeza semelhante a esta pergunta . Em um sistema operacional UNIX, quero excluir os diretórios que não estão sendo vinculados simbolicamente em um determinado diretório.

por exemplo. Eu tenho um script de implantação que cria uma estrutura de diretório para um aplicativo como este:

1.0-201103071711/
1.0-201103071718/
1.0-201103071729/
current -> /opt/myapps/fooapp/1.0-201103071729/

Eu quero criar um script que removerá os diretórios desse diretório que não são o diretório "atual". Obrigado!

    
por Dan 08.03.2011 / 17:24

2 respostas

1

Este trecho de Bash encontrará diretórios que não possuem diretórios vinculados a eles. Também encontrará links quebrados.

for f in *; do (($(find -L -maxdepth 1 -samefile "$f" 2>/dev/null | wc -l) == 1)) && echo "found: $f"; done

Ele não parece fora do diretório atual ou em subdiretórios.

Não deixe de testá-lo completamente.

    
por 08.03.2011 / 17:39
0

Como a questão mencionada mencionada, não há uma maneira oficial de fazer isso. Como alternativa à opção de Dennis, apresento o seguinte hack horrível. Por favor, certifique-se de testar cuidadosamente também. Recomendaria substituir a parte -exec por ls até que você tenha certeza de que funciona.

touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;

Ele irá verificar apenas o diretório atual. Ele essencialmente toca o diretório vinculado por 'current' e, em seguida, remove qualquer coisa com um tempo de modificação mais antigo que dois minutos. Se os outros diretórios não forem tocados por algum tempo, você pode aumentar o temporizador em -mmin , para que você não queime acidentalmente o diretório que deseja. Isto obviamente só é viável se você não se importa em mudar o timestamp no diretório atual.


- Christopher Karel

    
por 08.03.2011 / 18:01