Remover diretórios do Linux contendo APENAS arquivos antigos

5

Temos vários diretórios que contêm 2 arquivos, sendo um deles um arquivo oculto. Queremos remover todos os diretórios e seus conteúdos que contenham APENAS arquivos que tenham uma data de modificação anterior a 180 dias. Então, por exemplo, se tivermos o seguinte:

Dir1   Jan 1 2000
     File1A   Jan 1 2000
     File1B   Jan 1 2000
Dir2   Jan 1 2000
     File2A   Jan 1 2014
     File2B   Jan 1 2014
Dir3   Jan 1 2000
     File3A   Jan 1 2014
     File3B   Jan 1 2000

Eu preciso de um comando Linux que irá remover apenas o Dir1 e todo o seu conteúdo, incluindo o arquivo oculto. Dir2 e Dir 3 permaneceriam inalterados porque cada um contém pelo menos um arquivo que é mais recente do que 180 dias atrás.

Eu brinquei com a listagem dos diretórios que contêm um arquivo mais novo, mas não consegui encontrar um comando "inverso" que removeria todos os diretórios "outros".

    
por pk7 17.04.2014 / 21:45

2 respostas

6

Com ferramentas GNU:

for d in Dir*; do
  find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
    echo rm -rf "$d"
done

Remova o echo quando satisfeito. Remova o -q para descobrir por que um diretório não está sendo removido.

    
por 17.04.2014 / 22:08
1

Uma das abordagens é:

while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")

Pipe o em read e execute um comando de acordo.

    
por 17.04.2014 / 22:33