renomeia arquivos dentro de uma pasta em tempo real

3

Existe uma maneira de renomear arquivos dentro de uma pasta quando eles são criados?

Eu poderia executar um cron job a cada poucos segundos para fazer algo como ...

find . -name "file.*" -exec sh -c 'echo mv "" "$(echo "" | sed s/file.*$/"file-$(date).*"/)"' _ {} \;

mas isso parece muito incômodo, em termos de ciclo ...

    
por knishka 23.08.2012 / 01:53

2 respostas

5

Há um framework no Linux chamado inotify que permite que um programa registre um manipulador a ser chamado toda vez que um arquivo ou diretório é alterado, então se você estiver escrevendo um programa em C, você pode usá-lo. Obviamente, seu programa precisará estar em execução quando ocorrer a mudança.

Existe um daemon especial chamado incron que é como "cron for inotify "e é capaz de executar scripts quando um arquivo / diretório é alterado. Ele pode ser instalado com sudo apt-get install incron , então você precisará adicionar algumas linhas ao seu arquivo de configuração.

Veja um artigo útil: Linux incrond inotify: Monitore os diretórios para alterações e tome medidas

Se você pesquisar sinápticos para "inotify", encontrará muitas outras bibliotecas e programas com funcionalidade semelhante.

    
por Sergey 23.08.2012 / 02:07
1

Então, usando o incron , eu o configuro executando sudo apt-get install incron .

Meu objetivo: permitir que os emails com anexos de imagens enviados para um alias (aplicativo sendtodropbox.com) sejam automaticamente copiados para o repositório de fotos do meu blog para postagens.

Em seguida, criei um script simples:

#!/bin/bash
ls photo.JPG | while read a; do mv $a "$(echo "$a" | sed s/photo.JPG/"photo$(date +%a%b%d%H%M).jpg"/)"; done
mv photo* ~/Dropbox/Attachments /<photo repo>/

Coloco o script em ~/ e edito o arquivo /etc/incron.allow para incluir meu nome de usuário porque esses scripts e arquivos estão todos no meu diretório home. Em seguida, tenho que editar o arquivo de configuração do incron executando incrontab -e .

Aqui eu usei ~/Dropbox/Attachments/ IN_MOVED_TO ~/script.sh (eu usei IN_MOVED_TO porque a ação do Dropbox colocando um arquivo na pasta Dropbox é considerada um movimento)

Isso está funcionando instantaneamente quando eu envio uma imagem do meu celular ao Dropbox agora. Eu também testei o incron com o root e meu nome de usuário para ter certeza de que funcionou, meu primeiro teste como meu usuário foi: incrontab -e adicione a configuração: ~/ IN_CREATE touch ~/test , depois eu vou para ~/ e execute >foo e test aparece.

    
por knishka 23.08.2012 / 07:04