Script ou comando para listar todos os diretórios de nível superior que contenham subdiretórios com arquivos modificados com menos de 30 dias

1

Isso é bem único.

Estou procurando uma maneira de listar todos os diretórios de nível superior em uma pasta que contenha subdiretórios com arquivos novos ou modificados com menos de 30 dias.

Nós usamos um método de replicação para sincronizar arquivos do usuário em um repositório central e estou procurando uma maneira de monitorar quais usuários sincronizaram arquivos no último mês. Podemos então solucionar os que não são.

Eu usei "find. -type d -mtime -30", mas isso lista todas as subpastas e a saída é muito grande para fornecer uma imagem concisa.

Qualquer ajuda seria muito apreciada.

    
por Vard0 06.05.2016 / 08:23

3 respostas

1

Eu usaria find em cada diretório por vez, e canalizaria para grep -q . para verificar se há qualquer resultados, e imprimai o nome do diretório condicionalmente se havia ou não algum resultados:

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\n "$d"; done
    
por 06.05.2016 / 08:42
1

Isso pode não ser eficiente:

find -mindepth 3 -maxdepth 3 -type f -mtime -30 | 
    xargs -n 1 dirname | 
    xargs -n 1 dirname | 
    uniq # (or sort -u, I assume find's output is already sorted)
    
por 06.05.2016 / 08:36
0
find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '
find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '%pre%0' '\n'
0' '\n'

Requer o GNU sort e o GNU sed para as opções -z (entrada separada por NUL).

find lista todos os arquivos em subdiretórios do diretório atual com menos de 30 dias. a saída é canalizada para sed para remover tudo após o primeiro / e, em seguida, para sort para classificar os nomes de diretório resultantes.

    
por 07.05.2016 / 03:04