É possível renomear automaticamente um arquivo quando ele é colocado em um diretório específico?
Por exemplo, eu tenho um diretório chamado "dir0". Movo ou copio um arquivo chamado "file1" para "dir0". Então "file1" deve renomear para "file1_ {current timestamp}"
linux
filesystems
Nick.h
fonte
fonte
Respostas:
Normalmente, você faria isso programaticamente no momento em que cria ou move o arquivo, mas é possível disparar um script sempre que um arquivo é criado ou movido para uma pasta usando
incron
. Configure seu arquivo de tabulação usandoincrontab -e
uma linha como esta, mas com seus caminhos, é claro:Em seguida,
/path/to/script
escreva uma ação de renomeação rápida. Esteja ciente de que o script também será chamado para o novo arquivo que você cria, portanto, ele deve testar se o arquivo já foi nomeado adequadamente ou não. Neste exemplo, ele verifica se o arquivo tem um número de dez dígitos por segundos a partir da época como a última parte do nome do arquivo e, se não tiver, adiciona-o:Edit: Quando eu escrevi isso, eu estava com pouco tempo e não conseguia descobrir como
bash
fazer o padrão correspondente aqui. Gilles apontou como fazer isso sem chamar o grep usando a correspondência ERE no bash:fonte
Eu acho que
inotify
é uma ferramenta que pode ser usada neste caso. No Debian, existe uma ferramentainoticoming
para executar ações na criação de arquivos:{}
será substituído pelo nome do arquivo.O comando que eu forneci não está completo - causa um loop, porque quando o arquivo for renomeado, ele será reconhecido como novo e será
mv
editado novamente. Para evitar isso, você pode usar a--suffix
opção se você souber qual sufixo estará no arquivo antes de renomear.fonte
inoticoming
. Por curiosidade, quando seria melhor usar isso de novoinocron
?inoticoming
"semelhante aincrond
, mas mais leve e não iniciada como um daemon padrão", então acho que é apenas mais uma solução com uma abordagem ligeiramente diferente. .. Eu acho que issoincron
é mais popular - tenho poucos problemas para encontrar um pacote para ainoticoming
home page fora do Debian ... #inoticoming
apenas em distribuições baseadas no Debian (no meu Gentoo não há ebuild para isso). Na página que eu publiquei, existem dois pacotes:reprepro
e abaixo delainoticoming
... #Você pode pegar um script como esse e colocá-lo em execução ... Vou deixar como um exercício para o leitor adicionar os bits extras para que ele comece como um serviço e impedir que várias cópias sejam executadas ao mesmo tempo.
E aqui está o trabalho:
fonte
perl
pode fazer qualquer coisa, mas um script persistente que é executado em um loop while-true de X segundos é definitivamente um hack quando você pode receber notificações de eventos sobre gravação de arquivos e responder instantaneamente sem desperdiçar recursos o resto do tempo.