Criando um diretório de arquivos criados recentemente

1

Em um sistema que tenho, os arquivos são enviados por meio de uma série de vários mecanismos em um diretório central "de entrada". Uma vez por dia, esses arquivos são processados e movidos para onde precisam ser (essa lógica não é relevante aqui). Eles acabam em um subdiretório de /files/ . Eu acho que um simples (embora impreciso no meu caso específico) seria dizer que os arquivos que começam com "a" são movidos para /files/a/afile .

Portanto, tenho uma carga de subdiretórios em /files/ . Isso é ótimo e funciona para mim. No entanto, o cliente acabou de me dizer que seria bom se houvesse um diretório "adicionado recentemente" em que os arquivos da semana anterior estivessem disponíveis.

Meu primeiro pensamento foi criar um diretório chamado /recent-files/ e estender o script de processamento de arquivos para fazer o seguinte depois de mover os arquivos para fora de /incoming/ :

  1. Excluir todos os arquivos de dentro de /recent-files/
  2. Digitalize /files/ para qualquer arquivo (não diretório) criado dentro de uma semana
  3. Crie um symlink para cada um em seu caminho real e coloque-o em /recent-files/

Parece que iria funcionar, mas o meu bash ainda é muito fraco quando se trata de datas de aritmética e criação de arquivos. Alguém pode me emprestar uma mão criando uma declaração find ... -exec ... que se aproxima das partes dois e três?

Claro, se houver outra maneira de criar uma linha de comando e um "diretório de pesquisa" visível do NFS, me avise.

    
por Oli 23.10.2010 / 00:41

2 respostas

1
find -L files -type f -newerct '-7 days' -exec ln -s -t recent-files {} +

(Claro, altere "arquivos" e "arquivos recentes" conforme apropriado).

O 'c' usado em -newer não é tempo de criação, é o campo "change" como mostrado por stat (o comando, por exemplo, man 1 stat). Atualmente, é incomum que os sistemas de arquivos * nix armazenem o tempo de criação, mas o horário de alteração ('c'), modificação ('m') e acesso ('a') está disponível. Se o seu sistema de arquivos armazenar tempo de criação, você pode usar 'B' ("hora de nascimento") - você receberá uma mensagem de erro imediata se não for suportada.

Você pode ver o ponto de corte exato com a data:

$ date -d '-7 days'
Sat Oct 16 02:46:27 UTC 2010
$ date  # this was executed one second later
Sat Oct 23 02:46:28 UTC 2010
    
por Roger Pate 23.10.2010 / 04:47
1

Se o Zeitgeist e o FUSE forem viáveis para o seu cenário, Zeitgeist Filesystem permite ordenar arquivos e outros eventos do Zeitgeist por tempo em um sistema de arquivos do espaço de usuários.

Outra solução (mais simples) pode ser usar algo como fileschanged no seu script para monitorar seu diretório de arquivos recebidos.

    
por mgunes 23.10.2010 / 00:51