Excluir subdiretórios com YYYYMMDD no nome com mais de N dias

2

Eu tenho um diretório onde subdiretórios diários são criados, literalmente nomeados de acordo com $date . Como posso excluir pastas e seus conteúdos com mais de 7 dias de duração de acordo com o AAAAMMDD no nome do arquivo e não a data de metadados? Digamos que eu tenha (pulei alguns por brevidade):

20170817
20170823
20170828
20170901

Eu acabaria com as seguintes pastas (que devem ser mantidas):

20170828
20170901

Eu criei uma variável que contém a data há 7 dias: dt_prev=$(date -d "'date'-7days" +%Y%m%d)

Meu pensamento foi para ls -l uma lista desses nomes de pasta e comparar linha por linha, mas isso envolve a limpeza dessa lista, etc., e eu acho que tem que haver uma maneira mais fácil.

    
por kstats9pt3 01.09.2017 / 20:05

4 respostas

3

Acho que a solução seria uma versão mais simples do que glenn jackman postou , por exemplo

seven_days=$(date -d "7 days ago" +%Y%m%d)
for f in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do
   [ -d "$f" ] || continue
   (( $f < $seven_days )) && echo rm -r "$f"
done

Remova o echo se os resultados parecerem corretos.

O teste -d garante que apenas inspecionemos (remova) diretórios.

    
por 01.09.2017 / 20:27
0

Você não deve analisar ls , em vez disso, pode fazer algo assim:

for f in *; do test "$f" -lt "$date" && do something; done

Por exemplo, para os seguintes diretórios e date=20170825 :

$ ls
20170817  20170823  20170828  20170901
$ for f in *; do test "$f" -lt "$date" && echo "$f"; done
20170817
20170823
    
por 01.09.2017 / 20:29
0

Com o comando find único:

date_week_ago=$(date -d "7 days ago" +%Y%m%d)
find . -type d -regextype posix-extended -regex '.*/[0-9]{8}$' \
       -exec bash -c 'd=$(basename {}); (( '$date_week_ago' > $d )) && rm -rf "$d"' \;
    
por 01.09.2017 / 21:42
0

Basta usar o comando find .

find . -type d ! \( -name "$(date -d "-7 days" +%Y%m%d)" \
    $(eval printf "%s" "\" -o -name \
   \$(date -d -"{6..0}"days +%Y%m%d)\"") -o -name . \) -exec rm -rf -- '{}' +
  • Apenas d iretorias -type d
  • Apenas diretores com mais de 7 dias de idade em seus nomes.
  • Exclua esse diretório e seu conteúdo rm -rf -- '{}' de uma vez +
por 01.09.2017 / 20:33