excluir pastas com mais de 1 dia

4

Desejo excluir todas as pastas com mais de 1 dia com o seguinte comando:

find /test -mmin +1440 | xargs rm -rf

Mas a saída de find lista /test (e a removeria de acordo).

Como posso encontrar apenas as sub dirs de /test ? ( -maxdepth / -mindepth não disponível no AIX)

    
por Nir 27.08.2015 / 11:29

5 respostas

3

Como @meuh disse em seu comentário, você poderia usar /test/* em vez de /test . Seu comando poderia ser semelhante a este:

find /test/* -type d -mmin +1440 | xargs rm -rf

Nesse caso, apenas as subpastas de /test seriam removidas.

    
por 27.08.2015 / 11:51
7

POSIXly:

find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -prune

(usamos -prune para os diretórios que removemos com sucesso, para que find não reclame que eles desapareceram de repente).

Em qualquer caso, observe que o tempo de modificação (conforme verificado por -mtime acima) de um arquivo de diretório reflete apenas a última vez que uma entrada foi adicionada, removida ou renomeada nela.

Ele não é atualizado quando o conteúdo de qualquer um dos arquivos (do tipo regular ou diretório ou outro) vinculado a ele é modificado. Em particular, qualquer alteração feita nos subdiretórios ou em seu conteúdo não afeta o tempo de modificação de um diretório.

Observe que todas as -mindepth , -maxdepth e -mmin são extensões GNU (embora sejam suportadas em outras implementações).

O equivalente padrão de find . -maxdepth 1 seria:

find . -name . -o -prune

Para -mindepth 1 :

find . ! -name .

Para -mindepth 1 -maxdepth 1 :

find . ! -name . -prune

Para diretórios diferentes de . , use find some/dir/. ... como acima.

Para outros valores de profundidade, você pode usar -path , mas observe que, como ele foi adicionado recentemente ao padrão, alguns sistemas (como o AIX) ainda não o possuem.

Para: -maxdepth 2 :

find . ! -path '*/*/*' -o -prune

Para: -mindepth 2 :

find . -path '*/*/*'

Para outro diretório:

find some/dir//. -path '*//*/*/*'
    
por 27.08.2015 / 14:22
1

Bem, o -mmin primário é um GNUism que provavelmente não é suportado no AIX, já que é uma expansão boba comparada ao que o pessoal do BSD e eu usamos como extensão nos anos 80. Dado o fato de que sfind compila bem no AIX, eu recomendo:

sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +

O código está em schilytools em: link

    
por 27.08.2015 / 12:13
0
touch -t 201508260000 dummyfile
find /path/to/files -type f ! -newer dummyfile -delete

Formato de carimbo de data / hora yyyyMMddhhmm

A primeira linha cria um arquivo que foi modificado pela última vez em 26 de agosto de 2015. A segunda linha encontra todos os arquivos em / path / to / file que tem uma data não mais recente que o dummyfile e os exclui.

Se você quiser verificar que está funcionando corretamente, solte o argumento -delete e ele deve apenas listar os arquivos que seriam excluídos.

copiado do link

    
por 27.08.2015 / 13:19
0
find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}
    
por 27.08.2015 / 13:29

Tags